如何快速判定一个整数是不是两个完全平方数之和?
如题.
这个方法对于很大的整数(0~10^12)仍然很慢……
具体题目参见
这个题我是这样做的:
完全平方数有如下几个性质(与此题有关):
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个条件则进行您给出的判定过程.
这样做快了很多.
人气:356 ℃ 时间:2020-06-27 20:22:25
解答
问题的本质还是要遍历的,只要限制一下遍历规则即可.
第一:对于给出的整数n,求起平方根为sqrtn=sqrt(n),查找和为它的两个完全平方数循环到【sqrtn】(不大于sqrtn的整数);
第二:设两个数分别为a,b;起始遍历条件是:int a=(int)sqrtn;a递减
截至条件是aa;停止.
实例:
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)
推荐
猜你喜欢
- 请问I am lily who live in Paris.和 I am lily who lives in Paris 哪个正确
- 一个长方体冰柜,从里面量90cm,宽50cm,深50cm.它的容积是多少立方分米
- 美学中的名词解释 .
- “1.5*X的值等于3.6:4.8的值”怎么算比例(数学)
- 英语翻译
- 复合重句 中,where 和which用法有点歧义,如下题
- 甲乙两人相向而行甲的速度是20千米/小时,乙的速度是18千米/小时,他们在离中点3千米是相遇,问全?
- 在四边形ABCD中,AB>CD.E.F分别是对角线BD.AC的中点,求证:EF>1/2(AB-CD)