错误代码:
#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 a=0;
if(p<=1){
return 0;
}
else if(p==2){
return 1;
}
else{
for(int i=2;i<p;i++){
if(p%i==0){
a++;
}
}
if(a==0){
return 1;
}
else{
return 0;
}
}
}
void Gpldbach(int n)
{
for(int j=1;j<n;j++){
if(prime(j)==1){
if(prime(n-prime(j))==1){
printf("%d=%d+%d",n,prime(j),prime(n-prime(j)));
}
}
}
}
prime()不是1就是0,n-prime没有任何意义。
正确代码:
int prime (int p)
{
int a=0;
if(p<=1){
return 0;
}
else if(p==2){
return 1;
}
else{
for(int i=2;i<p;i++){
if(p%i==0){
a++;
}
}
if(a==0){
return 1;
}
else{
return 0;
}
}
}
void Goldbach( int n )
{
int x;
for(int j=2;j<n;j++){
if(prime(j)==1){
x=n-j;
if(prime(x)==1){
printf("%d=%d+%d",n,j,n-j);
break;
}
}
}
}