素数优化

时间:2014-12-21 01:22:09

标签: ruby math

以下是我一直在研究的素数计算器。目前,它可以在我的计算机上在大约22秒内计算100,000个素数。有关如何以编程方式或数学方式更快地编写以下程序的任何想法吗?

include Math

print "How many prime numbers do you want?:"
x = gets.chomp.to_i #want x primes
c = 0 #want c primes
t = 3 #test number
d = 1 #divisor
n = 0 #current number of divisors

puts "2"
c+=1
while c < x
    while n <= 1 && d <= Math.sqrt(t) 
        if(t % d == 0)
            n+=1
            d+=2
        else
            d+=2
        end
    end

    if(n == 1)
        c+=1
        puts "#{t}"
    end
    t+=2
    d = 1
    n = 0
end

1 个答案:

答案 0 :(得分:2)

找到N(或前n个素数)的所有素数的快速方法是使用称为筛子的东西。你的想法是从一个整数列表2开始,... M并与每个布尔值True或整数1相关联。然后从2开始,使2的每个倍数(大于2)为假(或零) )。这些都不是素数因为它们都可以被2整除。然后,在你的列表中,找到仍然具有True的下一个最小值(在这种情况下为3)。然后,将3的所有倍数(大于3)设置为False。然后重复一遍找到列表中仍然标记为True的下一个最小数字。 (4被标记为假,因为它是多个2),5是下一个选择。重复,重复,重复......直到找到的最小值大于sqrt(M)。然后列表中True的每个值都是素数。这将渐渐地比你的代码快得多(对于每个值都试图找到除数)。