不考虑取模的快速幂运算(迭代法)
/* 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)∗(B