素数の出力
重要性: 3
1 よりも大きい整数で、1 と自身以外では、余りなく割ることができない場合、その数値は 素数(prime) と呼ばれます。
つまり、1より大きいnが 1 と n 以外では割り切れない場合、素数となります。
例えば、5 は素数です。なぜなら、2, 3 と 4 ではあまり無く割ることができなからです。
2 から n の範囲で、素数を出力するコードを書きなさい。
n = 10 の場合、結果は 2,3,5,7 です。
P.S. コードは任意の n で動作させてください。固定値でハードコードはしないでください。
このタスクを解決するのに、多くのアルゴリズムがあります。
入れ子ループを使ってみましょう:
For each i in the interval {
check if i has a divisor from 1..i
if yes => the value is not a prime
if no => the value is a prime, show it
}
ラベルを使ったコードです。:
let n = 10;
nextPrime:
for (let i = 2; i <= n; i++) { // for each i...
for (let j = 2; j < i; j++) { // look for a divisor..
if (i % j == 0) continue nextPrime; // not a prime, go next i
}
alert( i ); // a prime
}
ここには最適化の余地が沢山あります。例えば、2 から i の平方根までの約数を探すことができます。しかし、とにかく、私たちが大きな間隔に対して効率的になりたいなら、アプローチを変更し、高度な数学とQuadratic sieve, General number field sieveなどの複雑なアルゴリズムに頼る必要があります。