Ruby-寻找100以下的素数?

Ruby-寻找100以下的素数?,ruby,methods,primes,Ruby,Methods,Primes,我想写一个代码,打印出100以下的所有素数。这是我到目前为止的代码 class Numbers def is_a_prime?(int) x = 2 while x < int/2 if int % x == 0 return false else return true end end end def primes_under_100 x = 2 while x &

我想写一个代码,打印出100以下的所有素数。这是我到目前为止的代码

class Numbers

  def is_a_prime?(int)
    x = 2
    while x < int/2
      if int % x == 0
        return false
      else
        return true
      end
    end
  end

  def primes_under_100
    x = 2
    while x < 100
      print x if is_a_prime?(x) # calling the method I defined above
      x+= 1
    end
  end
end

我想知道我哪里出错了。我的方法都不是私有的。非常感谢您的帮助。

您怎么称呼它?它们是
Number
类的公共方法,所以要调用它们,您需要实例化
Number
类的对象:

number = Numbers.new
primes = number.primes_under_100
另外,正如Leo Correa在我的回答中所说的那样,
方法是a\u prime?
不能这样调用,您应该使用:

print x if is_a_prime?(x)

为了使代码正常工作,您需要进行以下修改

class Numbers

  def is_a_prime?(int)
    x = 2
    while x < int/2
      if int % x == 0
        return false
      else
        return true
      end
    end
  end

  def primes_under_100
    x = 2
    while x < 100
      # Notice you're calling is_a_prime? on the instance of the Numbers object 
      # and sending x as an argument. Not calling is_a_prime? on the 'x'
      print x if is_a_prime?(x) 
      x+= 1
    end
  end
end
类号
def是素数?(int)
x=2
而x

然后调用\u 100下的
Numbers.new.primes\u

另一种方法是扩展Fixnum。这样,您应该能够在int值上调用它

应该是这样的

class Fixnum
  def is_a_prime?
    (2..(self/2)).each do |x|
      if self % x == 0
        return false
      end
    end
    return true
  end
end

我不知道哪个版本的Ruby包含这个方法,但是如果你使用2.2或更高版本,你可以这样做

将其添加到文件的顶部

需要“prime”
以及显示特定数目下的素数的方法

Prime.每(100)个都做| Prime|
p素数#=>2,3,5,7,11,…,97
结束

你怎么称呼这个
Numbers.new.primes\u在\u 100下
调用
Numbers时,您的代码将中断。new.primes\u在\u 100下
因为您试图调用
是a\u prime吗?
Fixnum
上的
Numbers
对象上的
如果x是a\u prime?,请打印x调用我在上面定义的方法
我调用了\u 100下的primes\u仅供参考,Ruby还有一个类可用于生成/检查素数。请确保首先
需要'prime'
。此外,还必须对FixNum调用此方法,因为素数是正整数。类被称为
数字
而不是
数字
。另外,他的代码将中断,因为他试图在一个
Fixnum
实例而不是
numes
上调用
is a\u prime?(int)
,我了解到,只需声明一个方法的名称,就可以调用一个没有参数的方法。如果它有参数,则使用括号内的参数调用该方法。为了调用它,我只需键入方法名“primes\u under_100”。我知道代码正在通过Numbers类实例化一个新对象。但是你能解释一下为什么我需要创建一个新对象来调用函数吗?@user3662249,因为你的代码是作为实例方法编写的。它们只能在Numbers类的一个实例上调用,而不能在类本身上调用。你是否应该在is_a_prime?()?+1中增加x以获得修补Fixnum的想法,这就是我要建议的。我认为在核心类中修补是ruby做事情的方式:DTotally!好的,这可能是一个糟糕/糟糕的计划,对于那些可能期望核心类按照其编写方式工作的严肃项目来说,但是对于一个简单的脚本来说,它可以很好(IMHO)。
class Fixnum
  def is_a_prime?
    (2..(self/2)).each do |x|
      if self % x == 0
        return false
      end
    end
    return true
  end
end