在1秒內求出第10000個質數的算法c 實現

在一秒內求出第10000個質數的c語言實現

<span style="font-size:18px;">#include <stdio.h>
#define MAXNUM 10000

void func()
{
    register int i, j;
    int cnt;
    int flag;
    int findvalue[MAXNUM] ={2};

    for(cnt = 1, i = 3; cnt < MAXNUM; i += 2)
    {
        for(j = 0; flag = ((findvalue[j] * findvalue[j]) <= i); j ++) {
            if(!(i % findvalue[j]))break;
        }
        if(!flag)findvalue[cnt ++] = i;
    }

    printf("%d\n", findvalue[MAXNUM - 1]);
}

int main()
{
    func();
    return 0;
}</span>

這個其實代碼很簡單,自己過一遍就懂了,只是思想比較新:

簡單說一下

先將2 填入數組findvalue 數組中,i 控制循環,從3開始,然後循環每次加2

這裏爲什麼加2 呢? 因爲從3 開始的連續的兩個奇數之間總會有一個偶數,那偶數就不用判斷了。


然後是裏邊的循環主要是用現在的每一個元素與findvalue 數組中的質數進行%運算

因爲兩個質數的乘積一定是一個非質數,所以該數不能被已有的比它小的所有質數整除,則加入findvalue 說明是質數。


這樣當cnt== MAXNUM 時,findvalue數組中其實已經存了10000個質數了。

輸出就OK了。


發佈了43 篇原創文章 · 獲贊 15 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章