2016-12-04 64 views
0

我正在解決一些問題,我無法解決這些問題。我必須在用戶輸入十進制數字時編寫一個代碼,並且我需要計算其他衆多系統中數字1開頭的次數。 下面是算法:我如何加快我的算法?

for (int i = 3; i <= n; i++) { 
    int z = n; 
    while (z != 0) { 
     x = z % i; 
     z = z/i; 
    } 
    if (x == 1) { 
     brOsnova++; 
    } 
} 
+0

你是指「其他衆多系統」是什麼意思? – solti

+0

我的意思是,數字基數可以是從3到無窮大的數字,因爲每個等於或大於2的數字從1開始,所以brOsnova始終爲1. –

+0

開頭是什麼意思?這個結束 - > 1000 < - 或者這個結束? – user4581301

回答

0

您可以通過不檢查我的那個驗證

i <= n < 2*i,因爲他們都將滿足已經加速了。 因此,只檢查for(int i = 3; i <= n/2; ++i),然後將(n + 1)/ 2加到最終brOsnova。我相信它可以進一步加速,並且必須有一些O(log(n))算法,但是它可能會被牽強附會......或者algorithm標籤的一個很好的候選問題。

0

取而代之的是循環的,用這個:

x = x - ((x/i) * i); 
if (x == 1) 
{ 
    ... 
} 

這隻適用於整數數學。

+0

我需要一個變量爲整數,一個爲休息,所以我可以知道1是第一個數字。 –