我需要在Ruby或Python中以最快的方式找到第n个素数:
require "prime"
puts Prime.first(n).join("")
数字> = 100000需要花费大量时间。
如何优化此代码?
答案 0 :(得分:0)
试一试: -
# Steps
# List first 'n' prime
# Choose the very last one
require "prime"
def nprime(n)
(Prime.first n).last
end
puts nprime(10001)
它给了我快速的答案:
$ ruby nprime.rb
104743
答案 1 :(得分:0)
你可以在python中尝试这个动态程序,它在素数字典中查找(由程序本身动态构建),它最初是空的,当你找到更大的素数时它会变得更快。
dict = {}
def prime(x):
dict[1] = 2
s = x
if x in dict:
return dict[s]
else:
while s > 0:
if s in dict:
pno = int(dict[s]) + 1
break
s-=1
while s < x:
m = 1
while m <= s:
if pno % dict[m] == 0:
pno+=1
m=1
else:
m+=1
dict[s+1]= pno
s+=1
return dict[x]
最初为较低的素数构建字典以加速较高的素数。查找第10000个素数的示例,在运行模块的python shell中执行以下操作: 黄金(1000) 黄金(5000) 素(10000)
答案 2 :(得分:0)
require "prime"
Prime::EratosthenesSieve.instance.get_nth_prime(1000000)