本题要求对任意给定的正整数N,求方程X2+Y2=N的全部正整数解。
输入格式:
输入在一行中给出正整数N(≤10000)。
输出格式:
输出方程X2+Y2=N的全部正整数解,其中X≤Y。每组解占1行,两数字间以1空格分隔,按X的递增顺序输出。如果没有解,则输出No Solution
。
输入样例1:
884
结尾无空行
输出样例1:
10 28
20 22
结尾无空行
输入样例2:
11
输出样例2:
No Solution
代码:
1 import java.util.Scanner; 2 public class two{ 3 public static void main(String[] args){//本题要求对任意给定的正整数N,求方程X2+Y2=N的全部正整数解。按X的递增顺序输出 4 Scanner scan = new Scanner(System.in); 5 int n = scan.nextInt();//获取输入 6 Tools tool = new Tools(); 7 if(!tool.qj(n))System.out.println("No Solution"); 8 //如果没有解就输出错误语句 9 } 10 } 11 class Tools{ 12 public boolean qj(int n){ 13 boolean f = false; 14 for(int i = 1;i < Math.sqrt(n / 2)//只需要取到一半的根号就能找到所有解,不要重复解;i++){ 15 if(Math.sqrt(n - i * i) % 1 == 0) 16 //如果另一个数是整数的话,就输出并且更改f值,确认已有解 17 { 18 System.out.println(i + " " + (int)(Math.sqrt(n - i * i))); 19 f = true; 20 } 21 } 22 return f; 23 } 24 }