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

 

简单的数学问题 开始无脑暴力T了一发,如图:

 

喵喵喵???只卡我一组数据???吓得我赶紧花了五个点头盾去写了个特判...

 

呸!你ACMer的脸还要不要了!!

 

我们可以设t^2=n,那么由此我们可以看出i和j一定是不大于t的,所以我们遍历到sqrt(n)即可,

当然,我们也不能无脑遍历,当我们知道i时便可由j^2=(n-i^2)来求得j,此外,i也不会大于j.

 

附AC代码:

 1 #include<iostream>
 2 #include<cmath>
 3 using namespace std;
 4 
 5 int main(){
 6     int n;
 7     cin>>n;
 8     int ans=0;
 9     int t=sqrt(n);
10     for(int i=0;i<=t;i++){
11         int j=sqrt(n-i*i);
12         if(j*j+i*i==n&&j>=i){
13             ans++;
14             cout<<i<<" "<<j<<endl;
15         }
16     }
17     if(ans==0)
18     cout<<"No Solution"<<endl;
19     return 0;
20 }

 

posted @ 2016-08-17 20:37  Kiven#5197  阅读(360)  评论(0编辑  收藏  举报