如何在ruby中获得短的第n个素数代码

时间:2019-03-11 13:07:53

标签: ruby

我有以下在ruby中运行的代码:

require'prime'
$<.each{|x|p Prime.take(x.to_i).last}

但是我想要一个较短的代码。 我尝试使用get_nth_prime(),但是找不到正确的语法。 还有较短的输入吗?

1 个答案:

答案 0 :(得分:2)

在Ruby中获得n(sup> th 素数的方法有很多(可以说是更好的),但是没有一种方法要短得多。最后,如果不计算前n-1个素数,就无法计算第n th 个素数,我想这就是Ruby让您进行动作的原因。您可以在上面的重复问题中看到一些好的解决方案。

关于您的其他问题:

  

输入较短吗?

这取决于您的用例。 $<是Ruby中的特殊变量;这是ARGF的别名,它很多$<.each会迭代命令行中给出的文件中的所有行,例如:

$ cat a.txt
1
2
3

$ cat b.txt
7
88
999

$ ruby -r prime -e "$<.each{|x| p Prime.take(x.to_i).last }" a.txt b.txt
2
3
5
17
457
7907

(如果您未提供任何文件名,ARGF将尝试从STDIN读取。)

不过,我怀疑您正在尝试做一些简单的事情。

您是否只是在给定单个输入的情况下尝试打印单个素数?在这种情况下,您可以这样做:

require "prime"
n = STDIN.each_line.first.to_i
p Prime.take(n).last
$ echo 999 | ruby script.rb
7907

不过,将输入作为命令行参数可能会更好。在这种情况下,您可以使用ARGV(别名$*),它是命令行参数的数组:

require "prime"
n = ARGV[0].to_i
p Prime.take(n).last
$ ruby script.rb 999
7907