哥德巴赫猜想认为:不小于4的偶数都可以表示为两个素数的和。
你不需要去证明这个定理,但可以通过计算机对有限数量的偶数进行分解,验证是否可行。
实际上,一般一个偶数会有多种不同的分解方案,我们关心包含较小素数的那个方案。
对于给定数值范围,我们想知道这些包含较小素数方案中最大的素数是多少。
比如,100以内,这个数是19,它由98的分解贡献。
你需要求的是10000以内,这个数是多少?
答案是 173
注意,需要提交的是一个整数,不要填写任何多余的内容(比如,说明性的文字)
有些地方可以优化的,比如判段素数和循环的部分,但我觉得没必要。。。想改可以自己改。
另外,malloc那部分可以设置成静态数组,,比如可以直接设置成b[5000]。。。
还有这个程序需要自己输入数字,你可以把它改成题目要求的写法,依然自己改。。。
#include<stdio.h>
#include<stdlib.h>
//判段素数,是1否0
int d_prime(int a)
{
int i=0;
for(i=2;i<a;i++)
{
if(a%i==0)
return 0;
}
if(i==a)
return 1;
else
return 0;
}
int main()
{
int i , n , a , c = 0;
int* b=NULL;
printf("输入任意大于4的偶数:\n");
scanf("%d",&c);
b = (int*)malloc(c * sizeof(int));
a = c;
for(a-=2;a>0;a-=2)
{
for(n=2;n<(a/2);n++)
{
if(d_prime(n)==1&&d_prime(a-n)==1)
{
b[i]=n;
i++;
break;
}
}
}
for (n = 0;n<(c/2-2); n++)
{
if (b[n] > b[n + 1])
{
a = b[n];
b[n] = b[n + 1];
b[n + 1] = a;
}
}
printf("%d", b[c/2-2]);
return 0;
}