除了 Sieve 之外的快速素数生成器
Fast Prime Generator besides Sieve
我最近编写了这段代码,但想知道是否有更快的方法来查找素数(不是 Sieve;我仍在尝试这样做)。有什么建议吗?我正在使用 Python,但我还是个新手。
def isPrime(input):
current = 0
while current < repetitions:
current = current + 2
if int(input) % current == 0:
if not current == input:
return "Not prime."
else:
return "Prime"
else:
print current
return "Prime"
i = 1
primes = []
while len(primes) < 10001:
repetitions = int(i)-1
val = isPrime(i)
if val == "Prime":
primes.append(i)
i = i + 2
print primes[10000]
如
n = 10000
for p in range(2, n+1):
for i in range(2, p):
if p % i == 0:
break
else:
print p
print 'Done'
?
这是一个检测 x 是否为素数的函数
def is_prime(x):
if x == 1 or x==0:
return False
elif x == 2:
return True
if x%2 == 0:
return False
for i in range(3, int((x**0.5)+1), 2):
if x%i == 0:
return False
return True
和另一个打印素数 < n
的实现
def prime_range(n):
print(2)
for x in range(3, n, 2):
for i in range(3, int((x**0.5)+1), 2):
if x%i == 0:
break
else:
print(x)
希望对您有所帮助!
如果您不使用筛子,那么下一个最好的可能是 wheel methods。此后,2 轮检查 2 和奇数。 6 轮检查 2、3 和形式为 (6n +/- 1) 的数字,即没有因数 2 或 3 的数字。上面 taoufik A 的答案是 2 轮。
我不会写 Python,所以这是 6 轮实现的伪代码:
function isPrime(x) returns boolean
if (x <= 1) then return false
// A 6-wheel needs separate checks for 2 and 3.
if (x MOD 2 == 0) then return x == 2
if (x MOD 3 == 0) then return x == 3
// Run the wheel for 5, 7, 11, 13, ...
step <- 4
limit <- sqrt(x)
for (i <- 5; i <= limit; i <- i + step) do
if (x MOD i == 0) then return false
step <- (6 - step) // Alternate steps of 2 and 4.
end for
return true
end function
我留给你把它转换成 Python。
我最近编写了这段代码,但想知道是否有更快的方法来查找素数(不是 Sieve;我仍在尝试这样做)。有什么建议吗?我正在使用 Python,但我还是个新手。
def isPrime(input):
current = 0
while current < repetitions:
current = current + 2
if int(input) % current == 0:
if not current == input:
return "Not prime."
else:
return "Prime"
else:
print current
return "Prime"
i = 1
primes = []
while len(primes) < 10001:
repetitions = int(i)-1
val = isPrime(i)
if val == "Prime":
primes.append(i)
i = i + 2
print primes[10000]
如
n = 10000
for p in range(2, n+1):
for i in range(2, p):
if p % i == 0:
break
else:
print p
print 'Done'
?
这是一个检测 x 是否为素数的函数
def is_prime(x):
if x == 1 or x==0:
return False
elif x == 2:
return True
if x%2 == 0:
return False
for i in range(3, int((x**0.5)+1), 2):
if x%i == 0:
return False
return True
和另一个打印素数 < n
的实现def prime_range(n):
print(2)
for x in range(3, n, 2):
for i in range(3, int((x**0.5)+1), 2):
if x%i == 0:
break
else:
print(x)
希望对您有所帮助!
如果您不使用筛子,那么下一个最好的可能是 wheel methods。此后,2 轮检查 2 和奇数。 6 轮检查 2、3 和形式为 (6n +/- 1) 的数字,即没有因数 2 或 3 的数字。上面 taoufik A 的答案是 2 轮。
我不会写 Python,所以这是 6 轮实现的伪代码:
function isPrime(x) returns boolean
if (x <= 1) then return false
// A 6-wheel needs separate checks for 2 and 3.
if (x MOD 2 == 0) then return x == 2
if (x MOD 3 == 0) then return x == 3
// Run the wheel for 5, 7, 11, 13, ...
step <- 4
limit <- sqrt(x)
for (i <- 5; i <= limit; i <- i + step) do
if (x MOD i == 0) then return false
step <- (6 - step) // Alternate steps of 2 and 4.
end for
return true
end function
我留给你把它转换成 Python。