一个整数加上100是完全平方数,再加上168也是完全平方数,求该数(10万以内)
下面是常规的暴力破解,“想挑战的人排好队,一个一个来”
#include<stdio.h>
#include<math.h> //引用含有开方sqrt的头文件
int main(void) {
long num,x,y;
//num从-99开始,加上100可以得到最小的完全平方数“1”
for(num=-99;num<100000;num++){
x = sqrt(num+100);
y = sqrt(num+268);//这里要注意格式
if(x*x==num+100&&y*y==num+268){
printf("%d\n",num);
}
}
return 0;
}
还有其他的方法,比如B站上一个老师曾用局限范围,不过我还不太理解
已知y^2-x^2=168,即(y+x)(y-x)=168,代换得i*j=168,之后就得到了2<=(i,j)<=168/2
int x,y,num=0,i,j;
for(i=2;i<=168/2;i++)//遍历i,得到对应j
{if(168%i==0){
j=168/i;y=(i+j)/2;x=(i-j)/2;
if(y^2==168+x^2){
num=y^2-268;
printf("%d\n",num);
}} }}
注:此算法错误,希望得到解决方案