标签:
基准时间限制: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 SolutionInput示例130Output示例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 }
标签:
原文地址:http://www.cnblogs.com/Kiven5197/p/5781814.html