CodeIQ:スーパー素数

私自身が表題の問題を解いた時のプログラムについて解説します。
問題の詳細は「スーパー素数」(CodeIQ)を参照してください。

問題の概要

問題を引用します。
スーパー素数問題
仕様
標準入力で指定された数値を元に N 番目のスーパー素数を表示してください。

スーパー素数とは
スーパー素数とは素数の数列の素数番目の要素で構成される数列である。


3, 5, 11, 17, 31, 41, 59, 67, 83, 109, 127, ...

標準入力

  • 数値(1-2017)の範囲の整数が入力されます
【例】
1

標準出力
  • 標準入力番目のスーパー素数を出力する
【例】
3

その他の仕様
・標準入力の末尾には改行があります
・標準出力の末尾に改行をつけてください
・標準入力の仕様で説明した内容以外の入力は行われません(不正入力に対するチェックは不要)

Samples
Sample1
標準入力
1

標準出力
3

Sample2
標準入力
3

標準出力
11

Sample3
標準入力
5

標準出力
31

私のプログラム

Rubyで解答しています。

#!/usr/bin/ruby
require 'prime'

def getPrime(n)
	return Prime.each.take(n).last
end

while line = gets
	line.strip!
	if line.empty? then next end

	p getPrime(getPrime(line.to_i))
end

解説

この出題者の問題としては異色な感じがします。
Rubyには素数ライブラリがあるので簡単です。

main

入力値を数値に変換し、getPrime()でその番号の素数を求め、さらにその結果から素数を求めて印字します。

getPrime(n)

n番目の素数を返します。
Rubyは素数ライブラリがあるのでn個の素数を求め、その最後を返すだけで終わりです。

雑感

何も考えずに素数ライブラリを使ってn番目の素数を求めるようにしましたが、もっと良い方法があるんでしょうか? 素数は前から順番に探してゆくしか無いと思いますが。
ちなみにRubyの素数列挙は一度探したものをキャッシュする(らしい)ので丸々2回探すよりも多少早いはずです。