素数
ほぼ日連載中のシリコンの谷は、いま。(http://www.1101.com/siliconvalley/2003-11-04.html)に触発されて、n番目の素数を求めるプログラムを作ってみた。
import java.util.*; public class PrimeNumber { /** 生成した素数を保存 */ private Vector primes; /** 最小値=2 */ public static final int MINIMUM_PRIME = 2; /** * n番目の素数を返す */ public int getPrime(int n) { if (n == 1) return MINIMUM_PRIME; this.primes = new Vector(); this.primes.add(new Integer(MINIMUM_PRIME)); int p = MINIMUM_PRIME + 1; for (int i = 2; i < n; i++) { this.primes.add(new Integer(p)); do { p += 2; } while (!isPrime(p)); } return p; } /** * 引数が素数かどうかを判定 * @param number 判定したい数値 * @return true:素数、false:素数ではない */ private boolean isPrime(int number) { if (number == MINIMUM_PRIME) return true; for (int i = 0; i < this.primes.size(); i++) { if (((Integer)this.primes.get(i)).intValue() > number / 2) break; if (number % (((Integer)this.primes.get(i))).intValue() == 0) { return false; } } return true; } public static void main(String args[]) { if (args.length == 0) { System.exit(0); } PrimeNumber primeNumber = new PrimeNumber(); int n = Integer.parseInt(args[0]); System.out.println(Integer.toString(n) + "番目の素数は" + Integer.toString(primeNumber.getPrime(n)) + "です\n"); } }
速度はまあまあだけど、コードが冗長になってしまった。もうちょっとエレガントにしたいなぁ。(ちなみに1000番目の素数は7919)
しかし、いきなり面接でこんなこと言われたらきっとパニックだわ。シリコンバレーへの道は遠い。(っていつから目指してたんだ?)