http://www.cnblogs.com/buptLizer/archive/2011/11/10/2244486.html
运算规则
模运算与基本四则运算有些相似,但是除法例外。其规则如下:
(a + b) % p = (a % p + b % p) % p (1)
(a – b) % p = (a % p – b % p) % p (2)
(a * b) % p = (a % p * b % p) % p (3)
(a^b) % p = ((a % p)^b) % p (4)
结合律:
((a+b) % p + c) % p = (a + (b+c) % p) % p (5)
((a*b) % p * c)% p = (a * (b*c) % p) % p (6)
交换律:
(a + b) % p = (b+a) % p (7)
(a * b) % p = (b * a) % p (8)
分配律:
((a +b)% p * c) % p = ((a * c) % p + (b *c) % p) % p (9)
重要定理:
若a≡b (% p),则对于任意的c,都有(a + c) ≡ (b + c) (%p);(10)
若a≡b (% p),则对于任意的c,都有(a * c) ≡ (b * c) (%p);(11)
若a≡b (% p),c≡d (% p),则 (a + c) ≡ (b + d) (%p),(a – c) ≡ (b – d) (%p),
(a * c) ≡ (b * d) (%p),(a / c) ≡ (b / d) (%p); (12)
快速幂运算:
int pow(int a,int n)
{
int rs=1;
while(n)
{
if(n&1)
rs=rs*a;
a=a*a;
n=n>>1;
}
return rs;
}
快速幂取余:
//求a^b%n,O(logb)
__int64 get_mi_mod(__int64 a,__int64 b,int n)
{
if(0 == a)
return 0;
if(0 == b)
return 1;
__int64 rs=1;
while(b)
{
if(b&1)
rs=(rs*a)%n;
a=(a*a)%n;
b>>=1;
}
return rs;
}