两个数的平方和
2015-04-23 00:38
190 查看
description |
给出一个整数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 |
sample_input |
130 |
sample_output |
3 11 7 9 |
下面的代码思想很好,遍历x,那么直接求sqrt(n-x*x)同时3为了防止重复,用数组记录可能的所有数,再比对,如果遇到相同的时候就结束。思维很是巧妙。
#include <iostream> #include <cmath> using namespace std; int a[100001]; int test(int x,int l) { int flag=0; for(int i=0;i<l;i++) { if(x==a[i]) {flag=1; break;} } return flag; } int main() { int n,m,x,y,flag,c,l; while(cin>>n) { m=(int)sqrt((double)n/2); flag=0;l=0; for(int i=0;i<=m;i++) { x=i; y=(int)sqrt((double)(n-i*i)); if(x*x+y*y==n) { a[l]=y; c=test(x,l); l++; if(c==0) {cout<<x<<" "<<y<<endl; flag=1; } else break; } } if(flag==0) cout<<"No Solution"<<endl; } return 0; }
相关文章推荐
- 51nod 1080 两个数的平方和
- 51nod 1080 两个数的平方和
- 51nod 1080 两个数的平方和
- 【51nod】1080 两个数的平方和
- 数学趣题——表示成两个数的平方和
- 两个数的平方和的平方根
- 51nod 1080 两个数的平方和
- 51nod 1080 两个数的平方和
- 51NOD 1080 两个数的平方和
- 51nod1080 两个数的平方和
- 51Nod 1080 两个数的平方和
- 51nod 1080 两个数的平方和
- 51nod 1080:两个数的平方和
- 【51Nod】1080 - 两个数的平方和(数论)
- 51nod 1080 两个数的平方和
- 51Nod 1080 两个数的平方和
- 51NOD-1080-两个数的平方和
- 51nod 1080:两个数的平方和
- 51nod 1080 两个数的平方和
- 两个数的平方和