私はこれが(n)がOであると考えているループ番号のすべての倍数をすばやく得る方法?
for(i=N;i<=K;i+=N)
printf("%d\n", i);
のために使用してKにNから数Nのすべての倍数を印刷しようとしているが、迅速な方法があれば、私は思ったんだけどそれをするの。ありがとう
私はこれが(n)がOであると考えているループ番号のすべての倍数をすばやく得る方法?
for(i=N;i<=K;i+=N)
printf("%d\n", i);
のために使用してKにNから数Nのすべての倍数を印刷しようとしているが、迅速な方法があれば、私は思ったんだけどそれをするの。ありがとう
出力のサイズがK/Nであるため、作成できないため、ソリューションはO(K/N)以上(またはO(n)そうでなければあなたの全体の出力。
しかし、printfへの呼び出し回数を最小限に抑えるなど、非アルゴリズム的な最適化を行うことは可能です(ただし、これがパフォーマンスに対して実際の影響を与えるかどうかはわかりません)。
ループ演算では最適化するものは何もないので、残っているのは重い重量printf
です。整数を桁シーケンスに変換して、独自の(非標準の)itoa()
のバージョンを実装することができます。
しかし、ここではちょっと遅すぎますか? I/Oにバインドされていますか? CPUバインド?それとも好奇心?
これについては遅いですか? – leppie
'printf'はこのループの中で最も高価な演算であるため、最適化するために他に何も残されません。 –
"早すぎる最適化はすべての悪の根源です" - Donald Knuth –