码迷,mamicode.com
首页 > 其他好文 > 详细

1080 两个数的平方和

时间:2016-08-17 21:04:40      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:

基准时间限制: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 }

 

1080 两个数的平方和

标签:

原文地址:http://www.cnblogs.com/Kiven5197/p/5781814.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!