1. 程式人生 > >【模板】快速冪&取余運算

【模板】快速冪&取余運算

取余 lld http latex clas long long scan org www

輸入\(b\)\(p\)\(k\)的值,求\(b^p mod k\)的值。其中\(b\)\(p\)\(k^2\)為長整型數。

1.普通做法

\(print\) \(pow(b,p)\)\(mod\)\(k\)

詳見數據範圍。於是我們需要手動執行冪運算。

2.依然是普通做法
for (int i=1;i<=p;i++)
{
    ans*=b;
    ans%=k;
}

T飛吧qwq

3.(依靠位運算的)快速冪

不想解釋……太懶了(累)

(畢竟這種東西解釋起來需要大量LaTeX)

當作一篇保存的模板吧……沈下去吧……如果有人真的是為了學習誤入了這裏,那麽右轉;

#include <cstdio>
#define ll long long
ll k;
ll power(ll a,ll b)
{
    ll ans=1,base=a;
    while (b>0)
    {
        if (b&1)
        {
            ans*=base;
            ans%=k;
        }
        base*=base;
        base%=k;
        b>>=1;
    }
    return ans;
}
int main()
{
    ll b,p;
    scanf("%lld%lld%lld",&b,&p,&k);
    printf("%lld^%lld mod %lld=%lld",b,p,k,power(b,p)%k);
    return 0;
}

【模板】快速冪&取余運算