我想知道为什么我的代码不起作用。我是新的代码世界,所以如果有人可以为我打破这个问题,如何最好地解决它,谢谢!
我正在尝试创建一个程序,它将从我指定的数字列表中指示素数。
请告诉我为什么这两个代码不工作!我对第二段代码试图做什么感到困惑,因为我发现它是别人解决我的问题的方法。我对编码很陌生,但我喜欢它,所以要忍受我自己!
以下是我的简单代码:
def is_prime?(*nums)
i = 2
nums.each do |num|
while i < num
if num % i == 0
puts "#{num} is not a prime"
else
puts "#{num} is a prime"
end
i += 1
end
end
end....Why,这不起作用吗?我怎么才能让它起作用?它一直给我一个奇怪的答案,因为它粘在我的第一个数字上,而且似乎没有处理我插入的下一个数字:
puts is_prime?(21, 23, 17)下面是我也无法正确运行的第二段代码。有人能把这里发生的事情弄清楚吗?我怎么才能让它起作用?
def is_prime?(*nums)
nums.each_with_object({}) do |num, hsh|
hsh[num] = num > 1 && 2.upto(num - 1).none? {|i| num % i == 0}
end
end
puts is_prime?(27, 13, 42)无论如何,我知道这个问题有点令人困惑,但如果有人愿意输入他们的2美分,我会很感激的!最后,我该如何正确地将代码贴在问题板上呢?没有良师益友,我是如此的新,如此的困惑!
发布于 2014-11-07 03:04:31
你有一些问题。其中一个是在前面确定的:语句i = 2的位置。这是你的固定代码。
def is_prime?(*nums)
nums.each do |num|
i = 2
while i < num
if num % i == 0
puts "#{num} is not a prime"
else
puts "#{num} is a prime"
end
i += 1
end
end
end当num % i == 0确定数字不是素数时,并为此打印一条消息,然后继续检查它是否可以被整除--所有小于num的大数字。每次num % i == 0打印出它不是素数。问题是,一旦确定一个数字不是素数,就不需要一直检查。
另一个问题是,每当num % i != 0打印数字是素数时。不过,这还为时过早。除非确定所有整数的num % i != 0小于num,否则不能得出这个结论。
让我们看看如何解决这些问题。我认为最简单的方法是编写一个单独的方法来确定单个数字是否为素数。我已经将该方法称为is_prime?,并将其改名为is_each_prime?主方法。
def is_each_prime?(*nums)
nums.each { |num|
puts "#{num} is #{ is_prime?(num) ? '' : "not " }a prime" }
end
def is_prime?(num)
(2...Math.sqrt(num)).all? { |i| num % i != 0 }
end
puts is_each_prime?(21, 23, 17)
#=> 21 is not a prime
# 23 is a prime
# 17 is a prime创建单独的方法is_prime?的一个优点是可以单独测试它,以确保它正常工作。
https://stackoverflow.com/questions/26792960
复制相似问题