Ruby- 质数唯一且重复

Ruby- prime number unique and duplicates

我只是在学习 Ruby :) 我正在尝试创建一个简单的素数程序,其中 所有 一个数的素数都被打印出来。

我遇到错误,其中 质数和非质数混淆了 (即:输入 9 将得到所有非质数)。

对于这样一个初学者的问题,我很抱歉 - 我很挣扎,需要一些帮助:)

puts "Enter a number please "
num = gets.chomp.to_i

i = 2
number = 2

while i < num
  if number % i == 0
    prime = false
  end
    i += 1
  end
  if prime == true
    puts "#{number} is prime"
  else
    puts "#{number} is not prime"
  end
  number += 1
end
while i < num
  if number % i == 0
    prime = false
  end
    i += 1
  end
  # ...

看起来第一个 end 应该是 else

当您简化代码时,更容易捕捉到这些东西,例如此方法简化为(尽管它还有其他问题):

i = 2
number = 2

while i < num
  (number % i).zero? ? prime = false : i += 1
  puts "#{number} is #{'not ' unless prime}prime"
  number += 1
end

结束错误是因为else

while i < num
  if number % i == 0
    prime = false
  else
    i += 1
  end

如果你有一个简短的 If - neater 是这样写的:

if-condition ? 1 : 0 

在你的情况下 while 是..不是最好的选择 - 你应该使用 range

(1...3).map{|x|  puts(x) }

{} - 允许多行(do end end)

这会打印 [1,2]

(1..3).map{|x| x*2 }

将是 [2,4,9]

这应该足以说明如何在不破坏进程的情况下使用您的代码。