埃拉託色尼篩法 質數檢驗

2022-09-15 02:27:11 字數 1060 閱讀 4801

isprime(x)

if x <= 1

return false

for i=2 to x-1

if x % i == 0

return false --false代表合數

return true --true 代表質數

isprime(x)

if x == 2

return true

if x == 0 或 x == 1

return false

if x % 2 == 0

return false

for i=2 to x的平方根

if x % i == 0

return false

return true

void eratos(n)                  //n代表質數的範圍(例如:n=10000代表篩選10000之內的數生成一張質數表)

for i=0 to n

isprime[i] = true //將所有的數都初始化為true

isprime[0] = isprime [1] = false //0和1都不是質數

for i = 2 to n的平方根 //要想篩選n以內的質數,直接遍歷到(2,√n)即可,如果√n之後的數能夠被(2,√n)這個範圍中的數整除,則這個數就是這個範圍中的數的倍數。(也就是被篩選掉的數)若不能,則為質數。(如果不能理解,則直接從i遍歷到n也可以(但是不推薦,因為會多很多無用的遍歷))

if isprime[i]

j = i + i //j為i的倍數

while j<=n //在指定的範圍內進行刪除

isprime[j] = false //將i的倍數進行刪除

j = j + i //更新j,使其j能遍歷所有i的倍數

求質數 篩選法(埃拉託色尼篩法)

所謂 篩選法 指的是 埃拉託色尼 eratosthenes 篩法 他是古希臘的著名數學家。他採取的方法是,在一張紙上寫上1到100全部整數,然後逐個判斷它們是否是素數,找出乙個非素數,就把它挖掉,最後剩下的就是素數。先將所有範圍內的正整數列出,構成數集a。1 從a中刪去1 2 從a中刪去2的整數倍 ...

Miller Rabin大質數檢驗

質數檢驗有不少演算法,一般使用的質數檢驗複雜度是 o sqrt 又如線性篩可以在 o n 的時間內求出所有1 n的質數 但是,當n非常大,連 o sqrt 的複雜度也難以接受時,上述演算法便不能滿足要求 這篇blog記錄了一些關於miller rabin演算法的內容 a equiv1 pmod p ...

埃拉託色尼篩法 c

如果自然數i為素數,則設a i 為1,否則設為0.首先把陣列中的所有元素設為1,以表明沒有任何數已被證明是非素數。然後,把陣列中所對應索引處已證明是非素數 已知素數的倍數 的元素設為0.如果所有更小素數的倍數都已經設為0,a i 仍然為1,則可知它是素數。因為程式中所用的陣列由最簡單的元素型別 0和...