我正在解決一些問題,我無法解決這些問題。我必須在用戶輸入十進制數字時編寫一個代碼,並且我需要計算其他衆多系統中數字1開頭的次數。 下面是算法:我如何加快我的算法?
for (int i = 3; i <= n; i++) {
int z = n;
while (z != 0) {
x = z % i;
z = z/i;
}
if (x == 1) {
brOsnova++;
}
}
我正在解決一些問題,我無法解決這些問題。我必須在用戶輸入十進制數字時編寫一個代碼,並且我需要計算其他衆多系統中數字1開頭的次數。 下面是算法:我如何加快我的算法?
for (int i = 3; i <= n; i++) {
int z = n;
while (z != 0) {
x = z % i;
z = z/i;
}
if (x == 1) {
brOsnova++;
}
}
您可以通過不檢查我的那個驗證
i <= n < 2*i
,因爲他們都將滿足已經加速了。 因此,只檢查for(int i = 3; i <= n/2; ++i)
,然後將(n + 1)/ 2加到最終brOsnova
。我相信它可以進一步加速,並且必須有一些O(log(n))算法,但是它可能會被牽強附會......或者algorithm
標籤的一個很好的候選問題。
取而代之的是循環的,用這個:
x = x - ((x/i) * i);
if (x == 1)
{
...
}
這隻適用於整數數學。
我需要一個變量爲整數,一個爲休息,所以我可以知道1是第一個數字。 –
你是指「其他衆多系統」是什麼意思? – solti
我的意思是,數字基數可以是從3到無窮大的數字,因爲每個等於或大於2的數字從1開始,所以brOsnova始終爲1. –
開頭是什麼意思?這個結束 - > 1000 < - 或者這個結束? – user4581301