一、同余概述
1、基本定理
定义:给定正整数 m,a,b,若 m mod a=m mod b ,则称 a 和 b 对模 m 同余,记作 a≡b (mod m),并称该式子为同余式;否则称 a 和 b 对模 m 不同余。
费马小定理:若 p 是质数,则 ∀a∈N+,ap≡a (mod p) 。
欧拉定理:若正整数 a,b 互质,则 aϕ(b)≡1 (mod b),其中 ϕ(b) 为欧拉函数,其定义为:若正整数 x 有 m 个不同质因数,分别记为 p1,p2,...pm−1,pm,则 ϕ(x)=x∏i=1m(1−pi1) 。
2、同余性质
对于正整数 a,b,c,m,对模 m 同余满足:
- a≡a (mod m)
- a≡b (mod m)⇒b≡a (mod m)
- a≡b (mod m),b≡c (mod m)⇒a≡c (mod m)
- a≡b (mod m)⇒a+c≡b+c (mod m)
- a≡b (mod m),c≡d (mod m)⇒ac≡bd (mod m)
- a≡b (mod m)⇒ac≡bc (mod m)
- a≡b (mod m),gcd(a,b)=1⇒a≡ab (mod m)
二、算法扩展
欧几里得算法:∀a,b∈N,gcd(a,b)=gcd(b,a mod b) 。
定理:设 a,b 不全为 0,则 ∃x,y∈N,ax+by=gcd(a,b) 。
代码实现(求解 ax+by=gcd(a,b)=d 的一组解 x,y):
void ed(int a,int b,int &d,int &x,int &y){
if(b==0){
d=a;
x=1;
y=0;
}
else{
ed(b,a%b,d,x,y);
int t=x;
x=y;
y=t-(a/b)*y;
}
}
参考资料《信息学奥赛一本通 · 提高篇》,本人水平有限,如有疑问,欢迎指正!
有帮助,赞一个