Ruby:Prime数字列表,只有一个数字输出

时间:2013-10-09 15:09:56

标签: ruby primes

我在简单的任务中遇到了问题,但无法弄清楚数小时,也无法找到任何示例。

我想做的事 - Ruby生成素数列表,用户输入一个数字(例如-5),Ruby显示第5个素数是11。

我有一个素数生成代码 -

def isPrime(n)
    for i in 2...n
       return false if (n%i) == 0
    end
end

(2..1000).each { |x| puts x if isPrime(x) }

3 个答案:

答案 0 :(得分:1)

首先,您应该将素数保存到数组中:

@primes = []
(2..1000).each do |x|
  @primes << x if isPrime(x)
end

或使用Enumerable#select缩短一点:

@primes = (2..1000).select { |x| isPrime(x) }

现在您可以处理用户输入:

loop do
  print "enter a number: "
  n = gets.to_i
  puts @primes.fetch(n-1) { "unknown prime" }
end

Kernel#gets从STDIN读取一行,String#to_i将输入转换为整数(忽略末尾的换行符),Array#fetch从索引n-1读取素数数组或返回未知质数的消息(在数组外)。

顺便说一下,您应该使用snake_case作为方法名称:

def is_prime(n)
  # ...
end

并且最好使用?作为谓词方法:

def prime?(n)
  # ...
end

答案 1 :(得分:0)

使用gets从命令行获取输入。

此外,Ruby有一个你可能会觉得有用的Prime库:

require 'prime'

puts "Which prime?"
x = gets.chomp.to_i

puts "Prime ##{x} is: #{Prime.first(x).last}"

运行:

$ ruby prime.rb 
Which prime?
5
Prime #5 is: 11

答案 2 :(得分:0)

除了gets之外,您可能还希望添加某种计数器来达到您的解决方案。

例如,如果用户想要第五个素数,则计数器将从0开始。每次运行该方法后,计数器会向上移动+1,直到达到5。

counter=0
counter+=1
until counter =userinput