#include <stdio.h>
#include <math.h>
int prime( int p );
void Goldbach( int n );
int main()
{
int m, n, i, cnt;
scanf("%d %d", &m, &n);
if ( prime(m) != 0 ) printf("%d is a prime number\n", m);
if ( m < 6 ) m = 6;
if ( m%2 ) m++;
cnt = 0;
for( i=m; i<=n; i+=2 ) {
Goldbach(i);
cnt++;
if ( cnt%5 ) printf(", ");
else printf("\n");
}
return 0;
}
/* 你的代码将被嵌在这里 */
int prime(int p){
int i,flag=0;
int limit;
limit=sqrt(p)+1;
if(p==1)flag=0;
else{
for(i=2;i<=limit;i++){
if(p%i==0)break;
}if(i<limit)flag=0;
else flag=1;
}
return flag;
}
void Goldbach( int n ){
int i,j;
int zone=2;
while(1){
for(i=zone;i<=n;i++){
for(j=2;j<=i;j++)if(i%j==0)break;
if(i==j)break;
}
int sum;
sum=sqrt(n-i)+1;
for(j=2;j<=sum;j++){
if((n-i)%j==0)break;
}zone=i+1; //关键要用zone使得i得以增加,并且使得那些i能够快速增加。十分有用。
if(sum<=j){printf("%d=%d+%d",n,i,n-i);break;}
}
}
注意:这是我使用两种方法来判断素数。一种高效难写,一种低效易写。这是两种办法的中和。