给出一个整数N,将N表示为2个整数i与j的平方之和(i <= j),如果有多种表示,按照i的递增序输出。
例如:N = 130,130 = 3^2 + 11^2 = 7^2 + 9^2(注:3^2 + 11^2同11^2 + 3^2算1种)
Input一个数N(1 <= N <= 10^9)Output共K行:每行2个数,i j,表示N = i^2 + j^2(0 <= i <= j)。 如果无法分解为2个数的平方和,则输出No SolutionSample Input
130
Sample Output
3 11 7 9
________________________________________________________________________________________________________________________________________________
满分代码:
1 #include <bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 long long n,ans=1; 6 cin>>n; 7 for(int x=0;x<=sqrt(n);x++)//着重注意x枚举的范围 8 { 9 int y=sqrt(n-x*x);//由于y是int类型,所以除整除情况以外,y的值都会上下取整而改变 10 if(y*y+x*x==n && x<=y)//如果y的平方+x的平方正好等于n,说明sqrt(n-x*x)的结果正好是整数,符合题目要求 11 { 12 ans=0;//判断旗帜 13 cout<<x<<" "<<y<<endl; 14 } 15 } 16 if(ans)cout<<"No Solution"; 17 return 0; 18 }