如何判斷乙個 16 位乃至更高位的整數是否為乙個素數?

時間 2021-05-30 05:39:54

1樓:

看了一下,大家給的答案都是估算方法,我講乙個準確方法,不是埃拉託色尼斯篩法。素數本身是沒有規律的,他的規律基於合數。以20為例,要求出小於20的素數的個數只要求合數個數就很容易得到。

但是問題是會有許多重複的合數出現,比如15,他即會出現在20/3裡面,也會出現在20/5裡面,這樣就多算了乙個合數,實際上數字越大,這樣的合數會越多,直接導致最終數值與真實資料天壤之別。但是這樣的重複合數也是有規律的。這個規律我要舉詳細的例子來說明:

以20例,小於等於20的數中,

M1表示可以分解為n1*n1的有「2*2=4,3*3=9,4*4=16」3種方式,M2表示可以分解為n1*n2的有「2*3=6,2*4=8,2*5=10,2*6=12,2*7=14,2*8=16,2*9=18,2*10=20,

3*4=12,3*5=15,3*6=18,4*5=20」12種方式,

M3表示可以分解為n1*n1*n1的有「2*2*2=8」1種方式,M4表示可以分解為n1*n1*n2的有「2*2*3=12,2*2*4=16,2*2*5=20,3*3*2=18」4種方式,M5表示可以分解為n1*n2*n3的有0種方式,M6表示可以分解為n1*n1*n1*n1的有「2*2*2*2=16」1種方式,

n1*n1

M1=3

2*2=4,3*3=9,4*4=16

n1*n2

M2=12

2*3=6,2*4=8,2*5=10,2*6=12,2*7=14,2*8=16,2*9=18,2*10=20,3*4=12,3*5=15,3*6=18,4*5=20

n1*n1*n1

M3=1

2*2*2=8

n1*n1*n2

M4=4

2*2*3=12,2*2*4=16,2*2*5=20,3*3*2=18

n1*n2*n3

M5=0

n1*n1*n1*n1

M6=1

2*2*2*2=16

接下來把整數換成素數,得到下面的答案:

Q1表示可以分解為p1*p1的有「2*2=4,3*3=9」2種方式,Q2表示可以分解為p1*p2的有「2*3=6,2*5=10,2*7=14,3*5=15」4種方式,

Q3表示可以分解為p1*p1*p1的有「2*2*2=8」1種方式,Q4表示可以分解為p1*p1*p2的有「2*2*3=12,2*2*5=20,3*3*2=18」3種方式,Q5表示可以分解為p1*p2*p3的有0種方式,Q6表示可以分解為p1*p1*p1*p1的有「2*2*2*2=16」1種方式,

p1*p1

Q1=2

2*2=4,3*3=9

p1*p2

Q2=4

2*3=6,2*5=10,2*7=14,3*5=15

p1*p1*p1

Q3=1

2*2*2=8

p1*p1*p2

Q4=3

2*2*3=12,2*2*5=20,3*3*2=18

p1*p2*p3

Q5=0

p1*p1*p1*p1

Q6=1

2*2*2*2=16

M值與Q值的關係:M1=1*Q1+0*Q2+0*Q3+0*Q4+0*Q5+1*Q6=2+1=3 M2=0*Q1+1*Q2+1*Q3+2*Q4+3*Q5+1*Q6=4+1+6+1=12

M3=0*Q1+0*Q2+1*Q3+0*Q4+0*Q5+0*Q6=1

M4=0*Q1+0*Q2+0*Q3+1*Q4+0*Q5+1*Q6=4

M5=0*Q1+0*Q2+0*Q3+0*Q4+1*Q5+0*Q6=0

M6=0*Q1+0*Q2+0*Q3+0*Q4+0*Q5+1*Q6=1

當X為60時,

n1*n1

M1=6

2*2=4,3*3=9,4*4=16,5*5=25,6*6=36,7*7=49

n1*n2

M2=28+17+11+7+4+1=68

2*3=6,2*4=8,2*5=10,2*6=12,2*7=14,2*8=16,2*9=18,2*10=20,2*11=22,2*12=24,2*13=26,2*14=28,2*15=30,2*16=32,2*17=34,2*18=36,2*19=38,2*20=40,2*21=42,2*22=44,2*23=46,2*24=48,2*25=50,2*26-52,2*27=54,2*28=56,2*29=58,2*30=60,3*4=12,3*5=15,3*6=18,3*7=21,3*8=24,3*9=27,3*10=30,3*11=33,3*12=36,3*13=39,3*14=42,3*15=45,3*16=48,3*17=51,3*18=54,3*19=57,3*20=60,4*5=20,4*6=24,4*7=28,4*8=32,4*9=36,4*10=40,4*11=44,4*12=48,4*13=52,4*14=56,4*15=60,5*6=30,5*7=35,5*8=40,5*9=45,5*10=50,5*11=55,5*12=60,6*7=42,6*8=48,6*9=54,6*10=60,7*8=56

n1*n1*n1

M3=2

2*2*2=8,3*3*3=27

n1*n1*n2

M4=20

2*2*3=12,2*2*4=16,2*2*5=20,2*2*6=24,2*2*7=28,2*2*8=32,2*2*9=36,2*2*10=40,2*2*11=44,2*2*12=48,2*2*13=52,2*2*14=56,2*2*15=60,3*3*2=18,3*3*4=36,3*3*5=45,3*3*6=54,4*4*2=32,4*4*3=48,5*5*2=50

n1*n2*n3

M5=12

2*3*4=24,2*3*5=30,2*3*6=36,2*3*7=42,2*3*8=48,2*3*9=54,2*3*10=60,2*4*5=40,2*4*6=48,2*4*7=56,2*5*6=60,3*4*5=60

n1*n1*n1*n1

M6=1

2*2*2*2=16

n1*n1*n1*n2

M7=6

2*2*2*3=24,2*2*2*4=32,2*2*2*5=40,2*2*2*6=48,2*2*2*7=56,3*3*3*2=54

n1*n1*n2*n3

M8=2

2*2*3*4=48,2*2*3*5=60

n1*n2*n3*n4

M9=0

n1*n1*n2*n2

M10=1

2*2*3*3=36

n1*n1*n1*n1*n1

M11=1

2*2*2*2*2=32

n1*n1*n1*n1*n2

M12=1

2*2*2*2*3=48

接下來把整數換成素數,得到下面的答案:

p1*p1

Q1=4

2*2=4,3*3=9,5*5=25,7*7=49

p1*p2

Q2=17

2*3=6,2*5=10,2*7=14,2*11=22,2*13=26,2*17=34,2*19=38,2*23=46,2*29=58,3*5=15,3*7=21,3*11=33,3*13=39,3*17=51,3*19=57,5*7=35,5*11=55

p1*p1*p1

Q3=2

2*2*2=8,3*3*3=27

p1*p1*p2

Q4=8

2*2*3=12,2*2*5=20,,2*2*7=28,2*2*11=44,2*2*13=52,3*3*2=18,3*3*5=45,5*5*2=50

p1*p2*p3

Q5=2

2*3*5=30,2*3*7=42

p1*p1*p1*p1

Q6=1

2*2*2*2=16

p1*p1*p1*p2

Q7=4

2*2*2*3=24,2*2*2*5=40,2*2*2*7=56,3*3*3*2=54

p1*p1*p2*p3

Q8=1

2*2*3*5=60

p1*p2*p3*p4

Q9=0

p1*p1*p2*p2

Q10=1

2*2*3*3=36

p1*p1*p1*p1*p1

Q11=1

2*2*2*2*2=32

p1*p1*p1*p1*p2

Q12=1

2*2*2*2*3=48

M值與Q值的關係:M1=1*Q1+0*Q2+0*Q3+0*Q4+0*Q5+1*Q6+0*Q7+0*Q8+0*Q9+1*Q10+0*Q11+0*Q12=4+1+1=6 M2=0*Q1+1*Q2+1*Q3+2*Q4+3*Q5+1*Q6+3*Q7+5*Q8+7*Q9+3*Q10+2*Q11+4*Q12=17+2+16+6+1+12+5+3+2+4=68

M值是關於所有連續整數的函式,可以準確計算,Q值是關於所有連續素數的函式,M值與Q值的等式中,不難發現:係數是唯一的,無限的。利用這個唯一不變的係數和準確的M值,就可以準確計算素數個數、孿生素數個數以及素數對數個數。

2樓:abcd

首先正如其他答主所說,這個問題是p問題,就是那個aks的,好像是印度人給出,但速度不夠快,實際應用中有更好的演算法,比如miller rabin演算法,這是乙個概率演算法,如果它判定乙個數是素數,那麼這個數是素數的概率大於或者等於四分之三,如果判定為合數則一定是合數。這兩個演算法所用到的知識不是很深,之需要初等數論和抽象代數知識就可以了,看懂前面的aks那個演算法需要一點有限域的知識。

3樓:Belleve

用 Miller-Rabin 能確定性地在 X 是合數的時候給出它是合數;高概率地在 X 是素數的時候判斷出它是素數。

AKS 則是確定性的,但是速度比 Miller-Rabin 慢。

4樓:莫濤

樓上提到的篩法和miller-rabin是資訊學競賽中使用的toy級演算法。

真正的素性檢測是非常「困難」的問題,它與線性規劃,圖同構合成為三大最有希望歸類到P卻始終沒有找到「確定性」多項式演算法的問題。(其中圖同構已解決)

相關的研究與理論發展很快,詳細的方法可以參閱《演算法數論》之類的書籍。

5樓:王盛頤

這個問題看你到底是有個數吃不準還是想知道一般的演算法,吃不準可以去 Wolfram Alpha 上搜,直接輸入英語比如 is 11111111111 a prime? 就行了: is 11111111111 a prime?

要知道一般的演算法嘛,這個叫「素性測試」,有很多辦法,直接看維基百科即可:http://

en.wikipedia.org/wiki/Primality_test

如何判斷乙個工作的價效比?

阿典 請問半佛,這思維模式或者說法方式太半佛了 半佛 應屆生求職利益最大化指南 嗶哩嗶哩 乾杯 bilibili 半佛 如何把自己賣個好價錢。嗶哩嗶哩 乾杯 bilibili 我沒法判斷,因為我沒有那麼多offer 半佛 不要成為全職家庭婦女,風險太高了。嗶哩嗶哩 乾杯 bilibili 錢多事少離...

如何判斷乙個畫室的好壞

果醬 在選擇畫室時確實需要了解清楚,因為有時侯選擇大於努力,判斷乙個畫室的好壞主要從這幾方面去考量,一是辦學時間,辦學時間久說明辦學經驗會比較豐富,還有近幾年的考學成績及發展趨勢,乙個畫室好壞的最關鍵體現就是考學成績,因為這是對學生和家長最好的回報,還有就是發展趨勢,如果近幾年畫室一直在變大說明口碑...

如何判斷乙個渣女?

親身經歷告訴你們,網上很多教你們鑑別渣女的方法都是片面的,狹隘的,碰到真正的渣女虐成灰真的,我就說一點吧,渣女不一定騙錢,她只是想得到她想要的就行。我曾經也被渣女騙感情過,乙個學妹,主動找我學鋼琴,他各種和我曖昧,投懷送抱,就希望我多抽出時間教教她,她還給我主動買了杯茶顏,你能說他不渣嗎?他想獲得的...