2012-05-08 9 views
-2

私はこれが(n)がOであると考えているループ番号のすべての倍数をすばやく得る方法?

for(i=N;i<=K;i+=N) 
     printf("%d\n", i); 

のために使用してKにNから数Nのすべての倍数を印刷しようとしているが、迅速な方法があれば、私は思ったんだけどそれをするの。ありがとう

+1

これについては遅いですか? – leppie

+8

'printf'はこのループの中で最も高価な演算であるため、最適化するために他に何も残されません。 –

+2

"早すぎる最適化はすべての悪の根源です" - Donald Knuth –

答えて

3

出力のサイズがK/Nであるため、作成できないため、ソリューションはO(K/N)以上(またはO(n)そうでなければあなたの全体の出力。

しかし、printfへの呼び出し回数を最小限に抑えるなど、非アルゴリズム的な最適化を行うことは可能です(ただし、これがパフォーマンスに対して実際の影響を与えるかどうかはわかりません)。

0

ループ演算では最適化するものは何もないので、残っているのは重い重量printfです。整数を桁シーケンスに変換して、独自の(非標準の)itoa()のバージョンを実装することができます。

しかし、ここではちょっと遅すぎますか? I/Oにバインドされていますか? CPUバインド?それとも好奇心?

関連する問題