快速幂取模运算(Modular Exponentiation)

来源:互联网 发布:宋孝宗 知乎 编辑:程序博客网 时间:2024/06/18 01:37

不考虑取模的快速幂运算(迭代法)

/* Iterative Function to calculate (x^y) in O(logy) */int power(int x, unsigned int y){    int res = 1;     // Initialize result    while (y > 0)    {        // If y is odd, multiply x with result        if (y & 1)            res = res*x;        // n must be even now        y = y>>1; // y = y/2        x = x*x;  // Change x to x^2    }    return res;}

快速幂运算(取模)

/* Iterative Function to calculate (x^n)%p in O(logy) *//*int可以换成long long 或者 unsigned long long*/int power(int x, unsigned int y, int p){    int res = 1;      // Initialize result    x = x % p;  // Update x if it is more than or                 // equal to p    while (y > 0)    {        // If y is odd, multiply x with result        if (y & 1)            res = (res*x) % p;        // y must be even now        y = y>>1; // y = y/2        x = (x*x) % p;      }    return res;}

模运算的性质

(AmodP)(BmodP)(AB)modP

(AmodP)(BmodP)modP(AB)modP

((AmodP)+(BmodP))modP(A+B)modP

((AmodP)(BmodP))modP(AB)modP

0 0
原创粉丝点击