int phi (int n) {
int result = n;
for (int i=2; i*i<=n; ++i)
if (n % i == 0) {
while (n % i == 0)
n /= i;
result -= result/i;
}
if (n > 1)
result -= result/n;
return result;
}
我看到上面的實現歐拉披功能這是的O(開方N)。我不明白在for
循環,需要使用i*i<=n
的事實的變化n
。據說它可以在更小的時間內完成O(sqrt n)如何? link (in Russian)計算歐拉披功能
什麼意思是更好的算法找到的因素?.Plz提到的算法的名稱 – DCoder
ρ和p-1算法,SQUFOF,連續分數,橢圓曲線算法,二次篩,數字場篩和許多其他現在不會想到。請注意,其中一些只能在專家手中運行良好。 – user448810
@DCoder爲什麼不按照剛剛引用的頁面上的鏈接,它說你可以找到phi「比O(sqrt(n))更快?」該鏈接回答了這個問題,這不應該是一個驚喜,因爲它還提到「有效的保理算法」。它描述了像Pollard rho因子分解這樣的事情,它可以跳過20位以上的數字。我不明白你如何閱讀該頁面,而不願意遵循它的鏈接。 –