真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

哥德巴赫猜想驗證-創(chuàng)新互聯(lián)

1、問題描述

10年積累的成都網(wǎng)站設(shè)計、成都做網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計后付款的網(wǎng)站建設(shè)流程,更有汕城免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

 大于等于6以上的偶數(shù)總有 = 2個質(zhì)數(shù)之和;

 例:12 = 3 + 9 X

 12 = 5 + 7 V (哥德巴赫猜想成立);

基本分析

哥德巴赫猜想驗證

2、基礎(chǔ)算法代碼實現(xiàn)

#include

typedef unsigned char boolean;

#define TRUE    1
#define    FALSE    0

boolean isPrime(int n);
boolean Gguess(int userNumber);

boolean Gguess(int userNumber){
    int num;
    int i;
    int flag = TRUE;

    for(num = 6; TRUE == flag && num < userNumber; num += 2){ //從6開始---userNumber的所有數(shù)字進(jìn)行哥德巴赫猜想
        flag = FALSE;
        for(i = 3; i < num && FALSE == flag; i += 2){
            if(isPrime(i) && isPrime(num-i)){
                flag = TRUE;
                printf("%d = %d + %d\n", num, i, num-i);
            }
        }
    }
}

boolean isPrime(int n){
    int i;

    for(i = 2; i= n;
}

void main(void){
    int num;

    printf("請輸入一個邊界數(shù): ");
    scanf("%d", &num);

    if(FALSE == Gguess(num)){
        printf("哥德巴赫猜想失敗\n");
    }else{
        printf("哥德巴赫猜想成功了\n");
    }
}

結(jié)果截圖

哥德巴赫猜想驗證

算法分析:

 基礎(chǔ)算法,的真正耗時的主要運算在"質(zhì)數(shù)判斷"上,無需計算,算法速度將大大加快。

3、中級算法

 (1)、思路:先把9位以內(nèi)的所有質(zhì)數(shù)都找出來,是質(zhì)數(shù)的為0,不是質(zhì)數(shù)的為1,判斷是否為質(zhì)數(shù)查表即可;

篩選法:以數(shù)組下標(biāo)為數(shù)值本身,而相關(guān)元素的值為0或1,0:是質(zhì)數(shù),1:非質(zhì)數(shù);

算法模型:

哥德巴赫猜想驗證

 (2)、判斷是否為質(zhì)數(shù)的高效代碼

#include
#include
#include

void findPrime(int number, char **p);

void findPrime(int number, char **p){
    int len = (int)(sqrt(number));
    int i;
    int j;
    char *pool;

    pool = (char *)calloc(sizeof(char), number);
    for(i = 2; i < len; i++){  //從2判斷到根號number的長度即可
        if(pool[i] == 0){  
            for(j = i*i; j < number; j += i){  //前面的都重復(fù)的判斷過了
                pool[j] = 1; //非質(zhì)數(shù)標(biāo)記為1
            }    
        }
    }

    *p = pool;
}

void main(void){
    int number;
    char *p = NULL;
    int i; 

    printf("請輸入多少位內(nèi)的質(zhì)數(shù): ");
    scanf("%d", &number);

    findPrime(number, &p);

    for(i = 3; i < number; i++){
        if(p[i] == 0){
            printf("%d ", i);
        }
    }
    printf("\n");

    free(p);
}

 (3)、結(jié)果截圖

哥德巴赫猜想驗證

 算法分析:

 因為用的輔助空間是char類型的,而只需存儲0/1,所有太浪費內(nèi)存空間,并且都是* 、/這類,運算速度比較慢

4、極端算法

 (1)、位運算的判斷質(zhì)數(shù)

#include
#include
#include

//位運算計算的效率更快
#define        SET_BIT(byte, i)    (byte |= 1 << (7 ^ (i)))  //設(shè)置這個字節(jié)的指定位為1
#define        CLR_BIT(byte, i)    (byte &= ~(1 << (7 ^ (i)))) //設(shè)置這個字節(jié)的指定位為0
#define        GET_BIT(byte, i)    !!((byte) & (1 << (7^(i))))  //得到這個字節(jié)的指定位

// num >> 3  數(shù)組下標(biāo)
// num & 7 <===> num % 8  
void findPrime(int number, char **p);

void findPrime(int number, char **p){
    int len = (int)(sqrt(number));
    int i;
    int j;
    char *pool;

    pool = (char *)calloc(sizeof(char), (number+7)>>3);
    for(i = 2; i < len; i++){  //從2判斷到根號number的長度即可
        if(GET_BIT(pool[i >> 3], i & 7) == 0){  
            for(j = i*i; j < number; j += i){  //前面的都重復(fù)的判斷過了
                SET_BIT(pool[j >> 3], j & 7);//非質(zhì)數(shù)標(biāo)記為1
            }    
        }
    }

    *p = pool;
}

void main(void){
    int number;
    char *p = NULL;
    int i; 

    printf("請輸入多少位內(nèi)的質(zhì)數(shù): ");
    scanf("%d", &number);

    findPrime(number, &p);

    for(i = 3; i < number; i++){
        if(GET_BIT(p[i >> 3], i & 7) == 0){
            printf("%d ", i);
        }
    }
    printf("\n");

    free(p);
}

 (2)、哥德巴赫猜想的完整算法

#include
#include
#include

typedef unsigned char boolean;

#define    TRUE    1
#define FALSE    0

//位運算計算的效率更快
#define        SET_BIT(byte, i)    (byte |= 1 << (7 ^ (i)))  //設(shè)置這個字節(jié)的指定位為1
#define        CLR_BIT(byte, i)    (byte &= ~(1 << (7 ^ (i)))) //設(shè)置這個字節(jié)的指定位為0
#define        GET_BIT(byte, i)    !!((byte) & (1 << (7^(i))))  //得到這個字節(jié)的指定位

// num >> 3  數(shù)組下標(biāo)
// num & 7 <===> num % 8  
void findPrime(int number, char **p);
boolean isPrime(int num, char *p);
boolean Gguess(int userNumber, char *p);

boolean Gguess(int userNumber, char *p){
    int num;
    int i;
    int flag = TRUE;

    for(num = 6; TRUE == flag && num < userNumber; num += 2){ //從6開始---userNumber的所有數(shù)字進(jìn)行哥德巴赫猜想
        flag = FALSE;
        for(i = 3; i < num && FALSE == flag; i += 2){
            if(isPrime(i, p) && isPrime(num-i, p)){
                flag = TRUE;
                printf("%d = %d + %d\n", num, i, num-i);
            }
        }
    }

    return flag;
}

boolean isPrime(int num, char *p){
    return GET_BIT(p[num >> 3], num & 7) == 0;  //0:表示為質(zhì)數(shù);
}

void findPrime(int number, char **p){
    int len = (int)(sqrt(number));
    int i;
    int j;
    char *pool;

    pool = (char *)calloc(sizeof(char), (number+7)>>3);
    for(i = 2; i < len; i++){  //從2判斷到根號number的長度即可
        if(GET_BIT(pool[i >> 3], i & 7) == 0){  
            for(j = i*i; j < number; j += i){  //前面的都重復(fù)的判斷過了
                SET_BIT(pool[j >> 3], j & 7);//非質(zhì)數(shù)標(biāo)記為1
            }    
        }
    }

    *p = pool;
}

void main(void){
    int num;
    char *p;

    printf("請輸入一個邊界數(shù): ");
    scanf("%d", &num);

    findPrime(num, &p);
    if(FALSE == Gguess(num, p)){
        printf("哥德巴赫猜想失敗\n");
    }else{
        printf("哥德巴赫猜想成功了\n");
    }
}

結(jié)果截圖:

哥德巴赫猜想驗證

算法分析:

 關(guān)鍵在質(zhì)數(shù)判斷上面進(jìn)行的算法的極簡優(yōu)化,由char-->位的簡化,和位運算的執(zhí)行速率極高;

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


文章標(biāo)題:哥德巴赫猜想驗證-創(chuàng)新互聯(lián)
瀏覽路徑:http://weahome.cn/article/edihh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部