@做完的影响 十分佩服你的善于思考,如果abcdef都是正整数,你的两个猜想在100w以内都成立,因此我暂且认为其恒成立。
你这个问题提出来了好几年,我写代码禁用了几分钟,然后几秒钟穷举就能验证其在一定范围内正确性了。没有别的意思,仅想说明,某些纯数学问题,使用计算机是一个很好的辅助手段去求解或证明。(10w以内验证花费几秒,100w以内花费600秒,还可以再继续验证,不过时间成本也会几何倍的增加,但是我认为没有必要,100w足够有说服力)。
但是我并不能给出完备的证明,我只能证明在100w以内你的两个猜想都正确,今儿可以认为你的猜想是正确的,帮你避免了走弯路,但完备的证明还得靠你自己啦。
运算结果及源码如下图:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int isPrime(int x)
{
int ret = 1;
int i;
if(x==1 || (x%2==0 && x!=2)) ret = 0;
for(i=3;i<sqrt(x);i+=2){
if(x%i==0){
ret = 0;
break;
}
}
return ret;
}
//猜想1:奇数C=i*2+1 & A+B=C -> 存在A^2+B^2 isPrime
int Conjecture_1(int Max){
int i,A,B,C;
for(i=1;i<=Max/2;i++){
C=i*2+1;
for(A=1;A<C;A++){
B=C-A;
if(isPrime(A*A+B*B)) break;
if(B==1){
printf("Conjecture_1 is wrong! The counterexample is C=%d...\n",C);
return 0;
}
}
}
return 1;
}
//猜想2:偶数C=i*2 & A+B=C -> 存在(A^2+B^2)/2 isPrime
int Conjecture_2(int Max){
int i,A,B,C;
for(i=2;i<=(Max/2);i++){
C=i*2;
for(A=1;A<C;A++){
B=C-A;
if((A*A+B*B)%2==0){
if(isPrime((A*A+B*B)/2)) break;
}
if(B==1){
printf("Conjecture_2 is wrong! The counterexample is C=%d...\n");
return 0;
}
}
}
return 1;
}
int main(){
int Max =1000000;
if(Conjecture_1(Max)) printf("Conjecture_1 is correct in the range of %d!!!\n",Max);
if(Conjecture_2(Max)) printf("Conjecture_2 is correct in the range of %d!!!\n",Max);
return 0;
}


