これはもっと数学的な質問だと思うけど、それはプログラミングに非常に関連しているので、私はそれを撃つだろうと思った。以下はCで素数のリストを計算するためのエラトステネスのふるいを使用してプログラムのための私のコードへのリンクです:エラトステネスのふるいCプログラム - 私たちはなぜi <= sqrt(n)などを持っていますか?
私の質問があり、ループのためのプログラムの冒頭では、なぜ我々は持っていますi < = sqrt(n)およびj < = n/j?これは私の教授が提案したものであり、プログラムの目的のために働いています(配列のメモリ制限を超えないなど)。しかし、なぜそれがうまくいくのか理解していません。
ありがとうございます!
PSエラトステネスのふるい:http://en.wikipedia.org/wiki/Eratosthenes_sieve
I <要因の一つは数 – Treesrule14
の任意の因数分解に以下又は数の平方根に等しくなければならないので= SQRT(n)は ' i <= sqrt(n) 'はひどく遅い演算であり、浮動小数点とは何の関係もない演算で浮動小数点を含みます。その代わりに、式を 'i * i <= n'と書くべきです。 –
'i * iの値が分かっているならば、'(i + 1)*(i + 1) 'の値は' i * i + 2 * i + 1'として計算するのが簡単です乗算なしで)。 –