素數的判斷和哥德巴赫猜想的簡證
阿新 • • 發佈:2018-12-24
簡述題目要求:
/*設計一函式,判斷一整數是否為素數。並完成下列程式設計:
①編寫求素數的函式,並用這個函式求 3-200 之間的所有素數
②在 4-200 之間,驗證歌德巴赫猜想:任何一個充分大的偶數都可以表示為兩個素數之和。輸出 4=2+2 6=3+3 …… 200=3+197*/
對於素數的判斷,我利用了一個bool型別的函式來描述,鑑於題目是從2開始輸出,故int num 只考慮了從2開始的情況:
(有一個程式設計的小技巧,個人愚見:用資料進行試探性驗證,進行演算法的編寫,會更加高效)
注意對sqrt()函式的使用要引入#include標頭檔案
bool primeNum(int num){
if (num==2)
return true;
else{
int i;
double n=num;//注意sqrt()函式要求對double型別的資料處理
for(i=2;i<sqrt(n)+1;i++)//sqrt(n)+1預防其值為整數情況
if(num%i==0)
return false;
if(i>sqrt(n))
return true;
}
}
然後可以用一個迴圈依次進行資料的判定即可,為了保證程式碼的完整性,給出如下程式碼(均寫在main函式中):
printf ("求3-200 之間的所有素數:\n");
printf("------------------------------------------------------------------------------\n");
int num=0;//用於格式化輸出,要在for之外宣告,本人渣渣掉過幾次坑
for(int i=3;i<=200;i++){
if(primeNum(i)){
cout<<i<<" ";
num++;
if((num+5)%5==0)//保證一行有5個數
printf("\n");
}
}
printf("---------------------------------------------------------------------------\n");
然後就可以驗證哥德巴赫猜想了:
//注意:內層for迴圈的終止條件是j<=i/2,而不是j<i,有興趣可以試一試
printf("在 4-200 之間,驗證歌德巴赫猜想:任何一個充分大的偶數都可以表示為兩個素數之和。輸出 4=2+2 6=3+3 …… 200=3+197:\n");
printf("-----------------------------------------------------\n");
for(int i=4;i<=200;i=i+2){
for(int j=2;j<=i/2;j++){
int temp=i-j;
if(primeNum(j)&&primeNum(temp))
printf("%d=%d+%d ",i,j,temp);
}
printf("\n");
}