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