尝试用ruby来判断用户输入是否为素数

时间:2017-03-03 04:26:08

标签: ruby

我是Ruby新手,只是阅读有关方法的内容,我一直致力于一个程序,以便让用户输入一个数字并确定它是否为素数。这是我到目前为止所做的。

print "Enter a number: "
num = gets.chomp

def prime(n)
  factors = []

  if num < 2
    puts "#{num} is a prime number"
  end

  while n % num == 0 and num < n
    factors.push(num)
    num += 1
  end

  return factors
end

甚至不确定我是否在正确的轨道上。真丢了。任何帮助将不胜感激!

4 个答案:

答案 0 :(得分:2)

require 'prime'
print "Enter a number: "
num = gets.chomp

Prime.prime?(n)

或者,从头开始:

def prime?(n)
  if n > 1
    min_condition = Math.sqrt(n).to_i  # The highest factor is necessary at most sqrt(n)
    factors = 0
    (1..min_condition).step(2).each do |i| # It's not necessary to check even numbers
      factors += 1 if (n.to_f / i) % 1 == 0
      break if factors > 1 # If the algorithm find 2 factors, the number isn't prime
    end
    !(factors > 1)
  else
    false
  end
end

答案 1 :(得分:1)

我知道您这样做是为了学习Ruby,但请记住,您只需使用Prime.prime?来确定数字是否为素数。

require 'prime'

Prime.prime?(3)
#=> true 
Prime.prime?(4)
#=> false

至于您的实际问题,您在方法中同时使用numn,但num在外部定义,因此不在范围内。另外:你似乎从来没有真正打电话给prime

答案 2 :(得分:0)

您的计划存在一些问题:

  1. 您想get the user to type in a number and determine if it is prime or not,但方法prime的输出无法回答 这个问题。它将返回一个数组。

  2. 如果数字小于2,则不是素数(wikipedia),因此这部分代码错误:

  3. if num < 2
      puts "#{num} is a prime number"
    end
    
    1. 有很多方法可以检查数字是否为素数,this topic可以帮助您实现Ruby。

答案 3 :(得分:0)

如果你不想使用ruby base库,那么代码对你来说很有用

print "Enter a number: "
num = gets.chomp

def check_prime_number(num)
 num = num.to_i
 n = 1
 factors = []

 while (num >= n ) do
    if  (num % n == 0 )
        factors << n unless factors.include?(n)
    end
    n += 1
 end
 if ( factors.size > 2)
    puts "Factors of number #{num} :-> #{factors}" 
 elsif num > 0
    puts "#{num} is prime"
 end
end

check_prime_number(num)

尝试它对你有用。