在计算质数的程序中出现了不正确的行为。

这个程序坚持认为35是一个质数,即使按步骤逐个进行,程序应该到达计算35%5的点,然后忽略该数字(因为结果为0)。我没有检查每个数字,但它似乎只显示质数(除了类似于35的数字,如135)。

print('您需要多少个质数?')
primes = io.read("*n")

print ('您要的质数:')

num,denom,num_primes = 2,2,0

while num_primes < primes do
   if denom < num then
      如果 num % denom == 0 then 
         num = num + 1
      else
         denom = denom + 1
      end
   else
      print(num)
      num = num + 1
      num_primes = num_primes + 1
      denom = 2
   end
end

样例输出:

  您需要多少个质数?
  50
  您要的质数:
  2
  3
  5
  7
  11
  13
  17
  19
  23
  27
  29
  31
  35
  37
  41
  43
  47
  53
  59
  61
  67
  71
  73
  79
  83
  87
  89
  95
  97
  101
  103
  107
  109
  113
  119
  123
  127
  131
  135
  137
  139
  143
  147
  149
  151
  157
  163
  167
  173
  179
点赞
用户258523
用户258523

你在 % 情况下没有重置 denom

if num%denom==0 then
    num=num+1
else

所以当你不通过这个测试时,你会从之前的分母开始测试下一个数字,而不是从 2 再次开始。

在循环中放置简单的调试打印行以打印出 denomnum 会向你展示这一点(事实上,这正是我发现问题的方法)。你只需要输出三个质数就能看到这个问题了。

2014-09-08 19:30:29
用户3293761
用户3293761
print ('你需要多少个质数?')
primes = io.read("*n")

print ('给你:')

num,denom,num_primes=2,2,0

while num_primes<primes do
   if denom<num then
      if num%denom==0 then
         num=num+1
         denom=2
      else
         denom=denom+1
      end
   else
      print(num)
      num=num+1
      num_primes=num_primes+1
      denom=2
   end
end

修正后,设置 denom=2num=num+1 后面。

2014-09-08 19:32:14