想不出来的一道c题!

来源:百度知道 编辑:UC知道 时间:2024/05/31 02:43:02
在10000以内验证哥德巴赫猜想之“1+1”命题:
任意大的偶数,都可以表示为两个素数之和!
谢了!

因为没有缩进格式,所以看起来可能比较困难,呵呵。1楼的算法是错的,我们假设当testdate=24 oddnum=21得时候,当i=2满足第一个判断条件if(oddnum%i!=0),然后sub=3,进入for循环并且此时满足第二个判断if(sub%i!=0),那么就会打印24是素数21加素数3得和,但显然21不是素数。我用C写了一个,算法效率有待商议,但结果是对的,并且TC下编译测试成功。
#include<stdio.h>
int main()
{
int i,j,k=1,flag=0,num[1229]; /*数组用来贮存10000以内的素数,我之前知道有几个,不然要用链表,太麻烦了。*/
num[0]=1;
for(i=2;i<10000;i++){ /*这段用来给数组赋值,贮存10000以内的所有素数*/
for(j=2;j<i;j++){
if(i%j==0) /*一旦当i被2以上自己本身以下的任何一个数整除,则不是素数,不会赋值给数组*/
flag=0;
}
if(flag){
num[k++]=i;
}
flag=1;
}
for(i=2;i<=10000;i+=2){ /*这段程序做穷举,测试每一个偶数*/
flag=0;
for(j=0;j<1229;j++){ /*穷举从num[0]+num[0]一直到num[1228]+num[1228]*/
if(flag)
break;
for(k=0;k<1229;k++){
if(i!=num[j]+num[k]&&(k+j)==2456){ /*一旦有一个偶数不等于num数组中的任意两个数相加则打印错误并退出程序,k+j=2456用来测试是否num[0]到num[1228]加上num[0]到num[1228]循环完毕*/
printf("error\n");