2012-04-06 17 views
0

我有一個非常大的沒有發言權'x'(10^18)和一個數字'z'說6 我是試圖用ac代碼知道/計算1到x(10^18)範圍內有多少數字可以被z整除。 對我使用一個簡單的循環優化一個代碼(檢查模塊== 0爲一個大的10^18)

While(x) 
{ 
    if(x % z == 0) 
     { 
      count++; 
     } 
    --x; 
    } 

但這段代碼正在如預期,因爲它是檢查所有的值從1到x太多時間。 是否有任何已知的算法或技術,我可以優化上述代碼,並仍然得到相同的結果。 非常感謝您的幫助。

回答

7
count = floor(x/z); 

很明顯,你需要一個足夠大的數據類型來容納x

+3

Aww打敗了我。但是,解決方案非常簡單。 – ClassicThunder 2012-04-06 17:45:32

+0

謝謝奧利查爾斯沃斯它爲我工作.. – abhi 2012-04-06 18:50:38