數論_埃氏篩法(求區間內多少素數)
阿新 • • 發佈:2018-12-08
埃拉託斯特尼(公元前276—公元前194)
埃拉託斯特尼是古希臘著名的數學家、地理學家、天文學家。他先在亞歷山大港學習,後又轉至雅典。公元前236年,托勒密三世指定他為亞歷山大圖書館的圖書管理員和館長。他跟阿基米德是好朋友。埃拉託斯特尼的主要貢獻包括:
埃拉託斯特尼篩法:尋找素數的方法。
地理常數測量:日地間距的測量(現在稱一個這樣的距離為一個天文單位)、地月間距的測量、測量赤道與黃道之間的偏角、地球半徑測量等。
精確地圖繪製:當時只有托勒密等級的人物能繪出同等級的地圖。
演算法數學原理:
埃拉託斯特尼篩法是快速篩選素數的演算法,在處理大量整數是否是素數時有較高的效率。
例:篩選小於n的整數並記錄結果。
解:計算sqrt(n),∵對於任意的z<n,若z為合數,不妨設z=a*b,則必有min(a,b)<sqrt(n)
∴所有小於n的合數均可被小於sqrt(n)的整數整除
從2開始,依次去除小於n的整數中能被其整除的數,最後剩下的就是素數
int prime[maxn]; bool is_prime[maxn];//is_prime[i]是true表示i是素數 //返回n以內素數的個數 int sieve(int n) { int p=0; for(int i=0;i<=n;i++) is_prime[i]=true; is_prime[0]=is_prime[1]=false; for(int i=2;i<=n;i++){ if(is_prime[i]){ prime[p++]=i; for(int j=2*i;j<=n;j+=i) is_prime[j]=false; } } return p; }
例題:洛谷 P1865 ,codevs3223 素數密度