Project Euler No.7

R1001877

MatlabProject Eulerを解く第7問。

By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.

What is the 10001st prime number?

最初の6つの素数を並べると2、3、5、7、11、13となる。6番目の素数は13だということがわかる。では、10001番目の素数は何か?

またしてもMatlab素数判定ルーチンの力を借りて実装。numを0からスタートさせてどんどん増やしていく。isprimeでその数が素数だったらcounterを1増やす。counterが10001になったときのnumの値を表示させれば、解が得られる。

num = 0;
counter = 0;

while counter<10001
  num = num+1;
  if isprime(num)==1
    counter = counter+1;
  end
end

disp(num);

遅延評価のある言語だったらかなりきれいに書けるんじゃないかと思う。Matlabでももう少し美しいアルゴリズムがあると思うんだけど、とりあえずこんなところで。