尤拉降冪
阿新 • • 發佈:2021-02-02
技術標籤:數論
為了求解這個式子a^bmodc,我們可以怎麼做?
暴力pow?快速冪?
很顯然,當b大到一定程度時,利用pow或者快速冪這樣的演算法是無法在給定時間內求解的,這時我們引入尤拉降冪演算法,這個演算法的特點就是降低冪方的值而不影響最終結果,使我們解決問題的時間縮短。
結論:
先給出尤拉降冪的公式:
尤拉函式
ll euler_phi(ll n)
{
ll k = (ll)sqrt(n + 0.5);
ll ans = n;
for(int i = 2; i <= k; i++)
{
if(n % i == 0)
{
ans = ans / i * (i - 1);
while(n % i == 0) n /= i;
}
}
if(n > 1) ans = ans / n * (n - 1);
return ans;
}