2011-11-28 81 views
1

我想寫一個C++程序來查找所有的數字與一定的範圍說(1至30億),可以完全整除一個數字說N我想知道如果我能得到指示,儘可能有效地做到這一點。最快的方法來計算一個大的數字列表模數

非常基本的:

for (i = 0; i < 3 BIllion; i++) 
{ 
    if (i % N == 0) print (i); 
} 

我相信會有更好的解決方案,因爲這將需要很長的時間。真的很感謝在正確的方向推動。

+0

不知道你對「儘可能高效」或者這個問題的實際程度有多嚴重。可能是更好的地方去問,也可能是在大會論壇上。你的第一個火鍋可能是你的打印代碼。 (我喜歡Oli的回答) –

回答

4

而不是依次測試所有數字,爲什麼不明確地生成倍數?

#include <cstdint> 

uint32_t i = 0; 
while (i < 3000000000) 
{ 
    printf("%d\n", i); 
    i += N; 
} 
+3

'i'可能需要是一個無符號整數,因爲30億超出了31位的範圍。 – jwodder

+0

@jwodder:很好,謝謝! –

+0

謝謝你,我正在做類似的事情。我猜想我過於複雜化了,我認爲我應該用一些操作魔法來優化mod,但我想這不是必須的,因爲編譯器會比我更好地優化。 – ababeel

相關問題