1. 程式人生 > >素數的判斷和哥德巴赫猜想的簡證

素數的判斷和哥德巴赫猜想的簡證

簡述題目要求:
/*設計一函式,判斷一整數是否為素數。並完成下列程式設計:
①編寫求素數的函式,並用這個函式求 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");
    }