我是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
甚至不确定我是否在正确的轨道上。真丢了。任何帮助将不胜感激!
答案 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
至于您的实际问题,您在方法中同时使用num
和n
,但num
在外部定义,因此不在范围内。另外:你似乎从来没有真正打电话给prime
。
答案 2 :(得分:0)
您的计划存在一些问题:
您想get the user to type in a number and determine if it is
prime or not
,但方法prime
的输出无法回答
这个问题。它将返回一个数组。
如果数字小于2,则不是素数(wikipedia),因此这部分代码错误:
if num < 2 puts "#{num} is a prime number" end
答案 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)
尝试它对你有用。