优化第n个素数Ruby / Python的代码

时间:2013-09-13 18:39:36

标签: python ruby optimization primes

我需要在Ruby或Python中以最快的方式找到第n个素数:

require "prime"

puts Prime.first(n).join("")  

数字> = 100000需要花费大量时间。

如何优化此代码?

3 个答案:

答案 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)

Prime ruby doc.

require "prime"
Prime::EratosthenesSieve.instance.get_nth_prime(1000000)