本題要求實現一個判斷素數的簡單函數,并利用該函數驗證哥德巴赫猜想:任何一個不小于6的偶數均可表示為兩個奇素數之和。素數就是只能被1和自身整除的正整數。注意:1不是素數,2是素數。
函數接口定義:
int prime( int p );
void Goldbach( int n );
其中函數prime當用戶傳入參數p為素數時返回1,否則返回0;函數Goldbach按照格式“n=p+q”輸出n的素數分解,其中p≤q均為素數。又因為這樣的分解不唯一(例如24可以分解為5+19,還可以分解為7+17),要求必須輸出所有解中p最小的解。
我的代碼:
int prime( int p )
{int i,flag = 1;int n = sqrt(p);if(p == 1)flag = 0;else{for(i = 2;i<=n;i++){if(p%i == 0){flag = 0;break;}}}return flag;
}
void Goldbach( int n )
{int i,j;int sign = 0;for(i = 3;i<=n/2;i++){j = n-i;if((prime(i) == 1)&&(prime(j) == 1)){printf("%d=%d+%d",n,i,j);sign = 1;}if(sign == 1)break;}
}
1.sign使得素數p最小時返回,解決了“要求必須輸出所有解中p最小的解”。