51Nod 1080 两个数的平方和
基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题
给出一个整数N,将N表示为2个整数i j的平方和(i <= j),如果有多种表示,按照i的递增序输出。
例如:N = 130,130 = 3^2 + 11^2 = 7^2 + 9^2 (注:3 11同11 3算1种)
Input
一个数N(1 <= N <= 10^9)
Output
共K行:每行2个数,i j,表示N = i^2 + j^2(0 <= i <= j)。
如果无法分解为2个数的平方和,则输出No Solution
Input示例
130
Output示例
3 11
7 9
1 /*优化思路很巧妙 没有想到*/ 2 #include<cstdlib> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #include<cstdio> 7 using namespace std; 8 int main() 9 { 10 int n; 11 scanf("%d",&n); 12 bool ok=0; 13 int m=sqrt(n+0.5); 14 for(int i=0;i<=m;i++){ 15 int j=sqrt(n-i*i); 16 if(j*j+i*i==n&&j>=i){ 17 ok=1; 18 printf("%d %d\n",i,j); 19 } 20 } 21 if(!ok) printf("No Solution\n"); 22 return 0; 23 }