分享三個關於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...