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和...