我不知道为什么但它一直说素数?(num)方法没有定义...
我试图让它找到素数在1到20之间的乘积
class LCM200
def prime?(num)
if num == 1 then
return false
end
range = Math.sqrt(num)
for i in 2..range
if num%i == 0
return false
end
return true
end
end
#if __FILE__ == $0
lcm = 1
for j in 1..20 do
if prime?(j)
lcm *= j
end
end
puts lcm
#end
end
答案 0 :(得分:3)
问题是因为您在类中运行代码。在类中,prime?
被定义为类的实例方法,但是当您在类中运行for循环时,您正在调用{{1}好像它是类方法(又名静态方法)。要修复它,只需删除类声明:
prime?
您还可以在更多" Ruby-ish"中定义def prime?(num)
if num == 1 then
return false
end
range = Math.sqrt(num)
for i in 2..range
if num%i == 0
return false
end
end
# Note: moved return true to here since otherwise it would return
# true after a single iteration
return true
end
lcm = 1
for j in 1..20 do
if prime?(j)
lcm *= j
end
end
puts lcm
。方式:
prime?
的文档
答案 1 :(得分:1)
您无需定义自己的prime?
功能。从Ruby 1.9开始,您只需调用 mathn 库的prime?
函数,如下所示:
require 'mathn'
13.prime?
此实例的一个例子:
$ irb
irb(main):001:0> require 'mathn'
=> true
irb(main):002:0> 1.prime?
=> false
irb(main):003:0> 3.prime?
=> true
irb(main):004:0> 11.prime?
=> true
irb(main):005:0> 20.prime?
=> false