求 ab?
如果 b 是偶数:ab=(a2)b/2
如果 b 是奇数:ab=a×(a2)b/2
例如:x20=(x2)10=(x4)5=x4∗(x8)2=x4×(x16)1
1 2 3 4 5 6 7
longlong x ,p ,m, ans=1; cin >> x >> p >> m; while(p != 0) { if(p % 2 == 1) ans = ans * x % m; x = x * x % m; p = p / 2; }
同余以及扩展欧几里得算法
什么是同余
a,b 除以 m 的余数相等,则称 a 和 b 对于模 m 同余 或a 同余 b 模 m
记作 a≡b(modm)
同余的性质
对称性: a≡b(modm) -> b≡a(modm)
传递性 a≡b(modm), b≡c(modm) -> a≡c(modm)
相加性 a≡b(modm) -> a+c≡b+c(modm)
同乘 (如上)
同幂 (如上)
裴蜀定理
裴蜀定理:设 a,b不全都为0 ,存在整数 x,y ,使得 a×x+b×y=gcd(a,b)。
总结 : 对于 $a \times x + b \times y = gcd(a, b) $ 中其中一组解
1. 如果 b=0 则 x=1,y=0
2. 其他情况 通过 x=y , y=x−a/b∗y 递归求解
设 x1,y1 为 ax+by=d 的一组解,则通解为 x=x1+k×b÷d y=y1−k×a÷d
扩欧
1 2 3 4 5 6 7 8 9 10
intexgcd(int a, int b, int &x,int & y){ if(b == 0) { x = 1,y = 0; return0; } int d = exgcd(b, a % b,x ,y); int t = x; x = y, y = t - a / b * y; return d; }