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

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

C/C++利用篩選法算素數(shù)的方法示例

2020-01-26 13:50:04
字體:
供稿:網(wǎng)友

什么是求素數(shù)

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

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

稱篩法

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

具體做法是:

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

普通枚舉法:

#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){//倍數(shù)取整 ans[j]=false; } } } int col = 0; for(int i=0;i<n;i++){ if(ans[i]){ cout<<i<<" "; } } return 0;}

改進(jìn)版本

#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"); } }}

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對武林網(wǎng)的支持。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 东海县| 克东县| 大余县| 自贡市| 高唐县| 城固县| 石景山区| 玉山县| 通河县| 渭南市| 闸北区| 开封市| 格尔木市| 务川| 宣武区| 彰化县| 专栏| 巴塘县| 文山县| 横山县| 龙山县| 抚顺市| 连山| 包头市| 县级市| 青浦区| 招远市| 林周县| 石棉县| 汽车| 克什克腾旗| 中方县| 德庆县| 青神县| 垦利县| 亚东县| 灌南县| 罗源县| 扶绥县| 沙田区| 柞水县|