Ruby 显示用户提示的数字的系数

Ruby 显示用户提示的数字的系数,ruby,factors,Ruby,Factors,我试图创建一个程序,提示用户输入一个数字,然后检查它是否是素数。我还试图让它显示因子,如果它不是素数的话 我成功地创建了程序的第一部分,但我正在努力完成最后一部分 def prime(n) is_prime = true for i in 2..n-1 if n % i == 0 is_prime = false end end if is_prime puts "#{n} is a prime number" else puts "#{n} is not a prim

我试图创建一个程序,提示用户输入一个数字,然后检查它是否是素数。我还试图让它显示因子,如果它不是素数的话

我成功地创建了程序的第一部分,但我正在努力完成最后一部分

def prime(n)
 is_prime = true
  for i in 2..n-1
   if n % i == 0
   is_prime = false
end
 end

if is_prime
 puts "#{n} is a prime number"
else
 puts "#{n} is not a prime number =>" 

end
 end


prime(n)
在这一步:

puts "#{n} is not a prime number =>" 
我想结合因子的显示,假设数字是8

8不是质数=>1,2,4,8

任何帮助或建议都将不胜感激

请尝试以下代码:

def factors(n)
  (1..n/2).select{|e| (n%e).zero?}.push(n)
end
系数(8)=>[1,2,4,8]

最后一步是:

puts "#{n} is not a prime number =>#{factors(n).join(',')}" 

顺便说一下:要检查数字是否为素数,建议使用。

您可以将因子查找代码的速度提高100%。您只需检查前半部分(
c/2
)编号。后半部分永远不会产生因子(除了
c
本身),也可以使用
select
而不是
map+compact
。看起来会干净得多。嗨,这很有效,谢谢!但是你能解释一下选择、加入和.zero是什么吗?做我对ruby比较陌生:/嘿,没问题:1。(1..n/2)生成从1到n/2的范围类。select从范围元素中进行选择,其中n%e==0零?如果number==0,则方法返回true;select方法返回数组3。推送(n)添加到数组元素(n)