lua 中是否有更快的方法来查找质数?

我正在解决欧拉计划,但我的代码计算时间太长了。我应该找到小于 2000000 的所有质数之和,但是我的程序需要才能完成。我想尝试一些不同的方法来查找质数,但问题是我只知道一种方法。

无论如何,这是我的代码:

sum=2
flag=0
prime=3
while prime<2000000 do
    for i=2,prime-1 do
        if prime%i==0 then
            flag=1
        end
    end
    if flag==0 then
        print(prime)
        sum=sum+prime
    end
    prime=prime+1
    flag=0
    if prime==2000000 then
        print(sum)
    end
end

有人知道其他查找质数的方法,甚至是优化此代码的方法吗?我总是试图自己解决问题,但这个问题真的难住了我。

无论如何,谢谢!

点赞
用户10808674
用户10808674

这段代码基于 埃拉托斯特尼筛法

每当找到一个质数时,其倍数将被标记为非质数。剩下的整数是质数。

nonprimes={}
max=2000000
sum=2
prime=3
while prime<max do
   if not nonprimes[prime] then
      -- 找到一个质数
      sum = sum + prime
      -- 标记质数的倍数
      i=prime*prime
      while i < max do
         nonprimes[i] = true
         i = i + 2*prime
      end
   end
   -- 质数不能为偶数
   prime = prime + 2
end
print(sum)

为了优化,不考虑偶数。这样可以减小数组大小和迭代次数2倍。这也是为什么被认为是已找到的质数的多个是 (2k+1)*prime。

你的程序有一些错误,并且计算 n^2 次除法非常昂贵。

2019-02-21 12:57:12