快速乘【模板】

来源:互联网 发布:中国联通宽带提速软件 编辑:程序博客网 时间:2024/04/30 21:43

快速乘:a*a=a+a+a·····+a(a个a相加),O(lgn/lg2)复杂度;

如果a比较大:a=a*a%m   =》   a=(a%m)*(a%m)%m  有可能m比较大,最终爆LL,快速乘能够解决;

#include<cstdio>typedef long long LL;LL f(LL a,LL b,LL c){    LL k=0;    while(b)    {        if(b&1) k=(k+a)%c;        a=(a+a)%c;        b>>=1;    }    return k;}int main(){LL a,b,c;    while(scanf("%lld %lld %lld",&a,&b,&c)!=EOF)    {    a%=c;    b%=c;        printf("%lld\n",f(a,b,c));    }    return 0;}


原创粉丝点击