习题6-5 使用函数验证哥德巴赫猜想

前言

这一题比前面几道函数题简单一些,不过自己在写程序的时候也犯了错误。把自己的方法和错误记录下来。

正文

代码(正确)

#include 
#include 

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;
	if(p==2)
	  return 1;
    else if(p==1)/*分开处理1和2的特殊情况*/
      return 0;
	for(i=2;i<p;i++){
		if((p%i)==0)
          return 0;
	}
	return 1; 
}
void Goldbach( int n ){
	    int i,j;
	    int count=0;//用于计数
		for(i=2;i<n;i++){
			for(j=2;j<n;j++){
				if(prime(i)==1&&prime(j)==1&&n==i+j){
					printf("%d=%d+%d",n,i,j);
					count=1;
				}
				if(count)break; //从最小的循环第一次后就结束
			}
		}
	}

之前判断素数的代码写错了,如下
错误:
没考虑1的情况。
for 循环return 1的位置错了,不能在循环内部,而要在循环体外部。

int prime( int p ){/*判断是否为素数*/
	int i;
	if(p==2)
	  return 1;
	for(i=2;i<p;i++){
		if((p%i)==0)
          return 0;
        else
          return 1; 
	}
}

你可能感兴趣的:(PTA题集)