51Nod 1080 两个数的平方和

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 }

 

posted @ 2017-02-12 09:09  浮华的终成空  阅读(156)  评论(0编辑  收藏  举报

Contact with me