我有以下在ruby中运行的代码:
require'prime'
$<.each{|x|p Prime.take(x.to_i).last}
但是我想要一个较短的代码。 我尝试使用get_nth_prime(),但是找不到正确的语法。 还有较短的输入吗?
答案 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