永发信息网

如何快速判定一个整数是不是两个完全平方数之和?

答案:2  悬赏:40  手机版
解决时间 2021-04-11 22:14
如题。
这个方法对于很大的整数(0~10^12)仍然很慢……
具体题目参见
https://www.spoj.pl/problems/TWOSQRS/

谢谢,这个题我是这样做的:
完全平方数有如下几个性质(与此题有关):
1.形如4n+2和4n+3型的整数一定不是完全平方数;
2.形如8n+2, 8n+3, 8n+5, 8n+6,8n+7型的整数一定不是完全平方数;
3.平方数的形式具有下列形式之一:16m,16m+1, 16m+4,16m+9。

所以一个数是两个完全平方数之和应有如下性质:
1.模4余3的数一定不是所求。
2.模8余3,6,7的数一定不是所求。
3.模16余3,6,7,11,12,14,15的数一定不是所求。
通过这3个条件可以滤过大部分的其他数,如果该数能通过这3个条件则进行您给出的判定过程。

这样做快了很多。

谢谢!
最佳答案
问题的本质还是要遍历的,只要限制一下遍历规则即可。
第一:对于给出的整数n,求起平方根为sqrtn=sqrt(n),查找和为它的两个完全平方数循环到【sqrtn】(不大于sqrtn的整数);
第二:设两个数分别为a,b;起始遍历条件是:int a=(int)sqrtn;a递减
截至条件是a<【b】的时候;循环内中给出b的值double b=sqrt(n-a*a);
经过这样两步,问题可以简单许多。比如判断122=121+1=十一的平方+1的平方的时候,【sqrtn】=11=a;b=1;//完成判断。
a=10;b=根号下22(判断它不是整数后 4点几)舍去;
a=9;b=41的平方根.6.几。舍去。
a=8;b=58的平方根;七点几;舍去;
a=7;显然b>a;停止。

实例:

void dec(int num)
{double sqrtn=sqrt(num),temp;
for(int a=(int(sqrtn),b=0;a>=b;a--)
{ temp=sqrt(num-a*a);b=(int)temp;
if((temp-double(b)<=0.00001)
cout<<a<<","<<b<<"的平方和为;"<<num<<endl;
}
cout<<"查找完毕"<<endl;
}
以上代码编译通过。速度不 错哦。
全部回答
问题的本质还是要遍历的,只要限制一下遍历规则即可。 第一:对于给出的整数n,求起平方根为sqrtn=sqrt(n),查找和为它的两个完全平方数循环到【sqrtn】(不大于sqrtn的整数); 第二:设两个数分别为a,b;起始遍历条件是:int a=(int)sqrtn;a递减 截至条件是a<【b】的时候;循环内中给出b的值double b=sqrt(n-a*a); 经过这样两步,问题可以简单许多。比如判断122=121+1=十一的平方+1的平方的时候,【sqrtn】=11=a;b=1;//完成判断。 a=10;b=根号下22(判断它不是整数后 4点几)舍去; a=9;b=41的平方根.6.几。舍去。 a=8;b=58的平方根;七点几;舍去; a=7;显然b>a;停止。 实例: void dec(int num) {double sqrtn=sqrt(num),temp; for(int a=(int(sqrtn),b=0;a>=b;a--) { temp=sqrt(num-a*a);b=(int)temp; if((temp-double(b)<=0.00001) cout<<a<<","<<b<<"的平方和为;"<<num<<endl; } cout<<"查找完毕"<<endl; } 以上代码编译通过。速度不 错哦
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
一个月的小狗能挤肛门腺吗?
跟爸爸打架了,爸爸叫我写检讨怎么写
郑州那有买封口机
我想问下中国移动现在算不算垄断
利施名车我想知道这个在什么地方
不该喜欢上他吗?
19岁订婚合适吗,还有订婚多长时间就会结婚呢
山不在高,有仙则名;水不在深,有龙则灵。斯
同事之间相遇要如何打招呼
从珠海可以怎么去香港,从珠海到香港怎么去
博艺坊这个地址在什么地方,我要处理点事
怎样才算真正了解一个人?
绘声绘影能不能合并两个avi格式的视频,怎么
a100好还是a103好?
你好 我也想知道 qq动画 旅途的完整版
推荐资讯
怎样把电脑声音调大,怎么才能将电脑的耳机声
我想求助心理医生 有没有认识的帮我介绍下 谢
谁能告诉我爱上一个网友该怎么办?
请用化学用语表示:①2个氢气分子________;
头部胀痛、头晕。
为什么退不了qq群
人大非全日制法硕没招满,会要校外调剂吗
拍拍卖家卖QQ增值服务一个月8元可以赚多少钱
希望四月份的考试能一次通过翻译英文
电动车,最重要的三大件有没有自产的。
最浪漫的事都有哪些?
梦幻西游80级STL
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?