题目描述:
哥德巴赫猜想:任何大偶数均可以表示为2个素数之和。
实验任务:
验证哥德巴赫猜想。计算给定的大偶数可以表示为多少对素数之和。例如,大偶数10,可以表示为2对素数3,7和5,5之和;
解题思路:构造素数表;
1 #include<stdio.h> 2 #define num 1000 3 int a[num]={2,3};//素数数组 4 void db() 5 { 6 7 int flag,t=2; 8 for(int i=5;;i+=2) 9 { 10 flag=1; 11 for(int j=0;a[j]*a[j]<i;j++) 12 { 13 if(i%a[j]==0) 14 { 15 flag=0; 16 break; 17 } 18 } 19 if(flag=1) 20 a[t++]=i; 21 if(t==num) 22 break; 23 } 24 } 25 26 int main() 27 { 28 int n,o=0; 29 db(); 30 while(scanf("%d",&n)!=EOF) 31 { 32 int ans=0; 33 for(int i=0;i<=num&&a[i]<=n/2;i++)//终止条件为a[i]的值超过n/2值 34 { 35 for(int j=0;j<=num;j++) 36 { 37 if(a[i]+a[j]>n) 38 break; 39 else if(a[i]+a[j]==n) 40 { 41 o=1;//找到 42 ans++; 43 printf("大偶数的素数对为:\n%d %d\n",a[i],a[j]); 44 break; 45 } 46 } 47 } 48 if(o==0) 49 printf("%d不存在素数对\n",n); 50 else 51 printf("total=%d\n",ans); 52 ans=o=0; 53 } 54 return 0; 55 }