快速求a的b次幂对c取余

快速幂取模理论基础:  计算 a^b mod c ?
  由(a x b) mod c=((a mod c) x b) mod c.
 我们可以将 b先表示成就:
   b=at2^t+at-1 2^t-1+……a02^0. (ai=[0,1]).
 这样我们由 a^b mod c=(a^(at2^t+at-12^t-1+…a02^0)mod c.

 然而我们求  a^(2^(i+1))mod c=((a^(2^i))mod c)^2 mod c .求得。

 

快速幂取余的程序:

 

long long BigMod(long long a,long long p,long long m)  //a^p%m
{
    if (a==0 || m==1)
        return 0;
    if (p==0)
        return 1;
    if (p%2)
        return ((a%m)*BigMod(a,p-1,m))%m;
    long long tmp=BigMod(a,p/2,m);
    return (tmp*tmp)%m;
}

阅读更多
文章标签: c
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭