国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C/C++利用篩選法算素數的方法示例

2020-05-23 13:31:57
字體:
來源:轉載
供稿:網友

什么是求素數

素數指的是因子只有1和本身的數(1不是素數),求解素數在數學上應用非常廣泛,而求解n以內的素數也是我們編程時常遇到的問題,在這個問題上,篩選法求解素數運行得非常快。

i在2到n-1之間任取一個數,如果n能被整除則不是素數,否則就是素數

稱篩法

篩選法又稱篩法,是求不超過自然數N(N>1)的所有質數的一種方法。據說是古希臘的埃拉托斯特尼(Eratosthenes,約公元前274~194年)發明的,又稱埃拉托斯特尼篩子。

具體做法是:

先把N個自然數按次序排列起來。1不是質數,也不是合數,要劃去。第二個數2是質數留下來,而把2后面所有能被2整除的數都劃去。2后面第一個沒劃去的數是3,把3留下,再把3后面所有能被3整除的數都劃去。3后面第一個沒劃去的數是5,把5留下,再把5后面所有能被5整除的數都劃去。這樣一直做下去,就會把不超過N的全部合數都篩掉,留下的就是不超過N的全部質數。因為希臘人是把數寫在涂臘的板上,每要劃去一個數,就在上面記以小點,尋求質數的工作完畢后,這許多小點就像一個篩子,所以就把埃拉托斯特尼的方法叫做“埃拉托斯特尼篩”,簡稱“篩法”。(另一種解釋是當時的數寫在紙草上,每要劃去一個數,就把這個數挖去,尋求質數的工作完畢后,這許多小洞就像一個篩子。)

普通枚舉法:

#include <iostream>#include <string>#include <cmath>#include <cstring>using namespace std;bool isPlain(int x){ if(x<2) return false; else{ for(int i=2;i<x;i++) { if(!(x%i)) return false; } } return true;}int main(){ int n; cin>>n; int cot=0; for(int j=0;j<n;j++){ if(isPlain(j)){ cout<<j<<((++cot%7==0)?"/n":"/t"); } }}

篩選法:

原始版本:

#include <iostream>#include <string>#include <cmath>#include <cstring>using namespace std;int main(){ int n; cin>>n; bool* ans=new bool[n]; memset(ans,true,sizeof(bool)*n);// ans[0]=false; ans[1]=false; for(int i=2;i<n;i++){ if(ans[i]){ for(int j=i*2;j<n;j+=i){//倍數取整 ans[j]=false; } } } int col = 0; for(int i=0;i<n;i++){ if(ans[i]){ cout<<i<<" "; } } return 0;}

改進版本

#include <iostream>#include <string>#include <cmath>#include <cstring>#include <bitset>using namespace std;int main(){ int n; cin>>n; bitset<100000> ans; ans.set(0); ans.set(1); for(int j=2; j<=sqrt(n); j++) { for(int i=2*j; i < n; i+=j) { ans.set(i); } } int cot=0; for(int i=0; i<n; i++) { if(ans[i]!=1) { cout<<i<<((++cot%7==0)?"/n":"/t"); } }}

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 柏乡县| 长葛市| 灵宝市| 舞阳县| 闽侯县| 德化县| 罗甸县| 乌拉特后旗| 长沙市| 蕲春县| 洛扎县| 湾仔区| 台北市| 威远县| 罗定市| 应城市| 临武县| 克什克腾旗| 安陆市| 江华| 钦州市| 昌江| 肥西县| 雷山县| 富裕县| 荥经县| 黔江区| 申扎县| 香港 | 宜州市| 仁布县| 申扎县| 象州县| 红安县| 西峡县| 古交市| 乌什县| 潜江市| 南和县| 池州市| 外汇|