關於c語言的選擇質數三種方法

2021-10-10 13:59:37 字數 1057 閱讀 6515

分享三個關於c語言的求質數方法,質數就是只能被1和自身整除的數

將質數標記為0,合數為1。

依次遍曆法。顧名思義,這種方法是最容易想到的但也是計算量最大的,利用質數只能被1和自身整除的特性求出範圍內的質數。

#include

intmain()

;int c;

int j;

for(c =

2; c <= n; c++)}

}for

(c =

2; c <= n; c++)}

return0;

}

原理在於利用質數的倍數是質數。初始時,假設全部都是素數,當找到乙個素數時,顯然這個素數乘上另外乙個數之後都是合數把這些合數都篩掉,即演算法名字的由來。

#include

intmain()

;int c;

int j;

for(c =

2; c * c <= n; c++)}

}for

(c =

2; c <= n; c++)}

return0;

}

仔細分析質數篩法能發現,這種方法會造成重複篩除合數,影響效率。

比如10,在i=2的時候,k=2x15篩了一次;在i=5,k=5x6 的時候又篩了一次。所以,也就有了快速線性篩法。利用了每個合數必有乙個最小素因子。每個合數僅被它的最小素因子篩去正好一次。所以為線性時間。

#include

intmain()

;int c;

int j;

for(

int i =

2; i < n; i++

)//標記目前得到的素數的i倍為非素數

for(

int j =

0; j < index && prime[j]

* i < n; j++)}

}for

(c =

2; c <= n; c++)}

return0;

}

質數打表 (三種方法)

分析 所有可能的因數全部試一遍 const int maxn 1e6 5 int prime maxn voidp1 分析 先把所有整數列出來,然後把2的倍數全部剔除,然後是3的倍數,4的倍數 以此類推,遍歷所有素數,把倍數全部去掉。對於每個數字i,如果沒被去掉,它一定是質數,因為它不是任何2到i ...

演算法 求質數常見的三種方法

最近新開了乙個欄目,打算記一些常見問題的演算法,以後說不定有用到可以套用一些。質數 prime number 又稱素數,有無限個。質數定義為在大於1的自然數中,除了1和它本身以外不再有其他因數。這次我們的例題是 求n以內的質數。其中 n是傳入的引數 這裡我們介紹三種常見方法 1.完全遍曆法 這種演算...

三種方法實現選擇問題

一 選擇問題 選擇問題 selection problem 是求一陣列 n個數 中第k k n 個最小元素的問題。二 三種方法實現 1.確定演算法 lomuto劃分 hoare劃分 2.非確定演算法 概率演算法 sherwood演算法 三 lomuto劃分1 include include usin...