大家好,欢迎来到IT知识分享网。
同余概述
定义: 同余给定正整数 m m m,若用 m m m去除两个整数 a a a和 b b b,所得的余数相同,称a和b对模 m m m同余,记作 a ≡ b ( m o d m ) a≡b(mod\ m) a≡b(mod m),并称该式为同余式,否则,称 a a a和 b b b对模 m m m不同余。
定理:
- a ≡ b ( m o d m ) a≡b(mod\ m) a≡b(mod m),当且仅当 m ∣ ( a − b ) m|(a-b) m∣(a−b)
- a ≡ b ( m o d m ) a≡b(mod\ m) a≡b(mod m),当且仅当存在正整数 k k k,使得 a = b + k m a=b+km a=b+km
- 同余关系是等价关系,即
(1)自反性: a ≡ a ( m o d m ) a≡a(mod\ m) a≡a(mod m)
(2)对称性: a ≡ b ( m o d m ) a≡b(mod\ m) a≡b(mod m),则 b ≡ a ( m o d m ) b≡a(mod\ m) b≡a(mod m)
(3)传递性: a ≡ b ( m o d m ) , b ≡ c ( m o d m ) a≡b(mod\ m),b≡c(mod\ m) a≡b(mod m),b≡c(mod m),则 a ≡ c ( m o d m ) a≡c(mod\ m) a≡c(mod m)
定义:由与同余关系是等价关系,对于所有整数会被分为 m m m的集合,这些集合称为模 m m m剩余类(同余类)。每个集合中的任意两个数都是模 m m m同余的。
定义:一个整数集合,且满足对于任意的整数在此集合中存在一个元素与该整数模 m m m同余,该整数 0 , 1 , 2 , . . . , m − 1 0,1,2,… ,m-1 0,1,2,...,m−1的集合是模 m m m的完全剩余系。
定理:若 a a a, b b b, c c c, d d d是整数, m m m是正整数,且 a ≡ b ( m o d m ) , c ≡ d ( m o d m ) a≡b(mod\ m),c≡d(mod\ m) a≡b(mod m),c≡d(mod m),则:
4. a + b ≡ b + c ( m o d m ) a+b≡b+c(mod\ m) a+b≡b+c(mod m)
5. a − b ≡ b − c ( m o d m ) a-b≡b-c(mod\ m) a−b≡b−c(mod m)
6. a c ≡ b c ( m o d m ) ac≡bc(mod\ m) ac≡bc(mod m)
7. a c ≡ b c ( m o d m ) , c ≠ 0 ac≡bc(mod\ m),c≠0 ac≡bc(mod m),c=0,则 a ≡ b ( m o d m g c d ( m , c ) ) a≡b(mod\ \frac{m}{gcd(m,c)}) a≡b(mod gcd(m,c)m)
8. a x + c y = b x + d y ( m o d m ) ax+cy=bx+dy(mod\ m) ax+cy=bx+dy(mod m),其中 x , y x,y x,y为任意整数,即同余式可以相加
9. a c ≡ b d ( m o d m ) ac≡bd(mod\ m) ac≡bd(mod m),即同余式可以相乘
10. a n ≡ b n a^n≡b^n an≡bn, n > 0 n>0 n>0
11. f ( a ) ≡ f ( b ) ( m o d m ) f(a)≡f(b)(mod\ m) f(a)≡f(b)(mod m),其中 f ( x ) f(x) f(x)为任一整数多项式
定理:若a,b,c,d为整数,m为正整数,则:
- 若 a ≡ b ( m o d m ) a≡b(mod\ m) a≡b(mod m),且 d ∣ m d|m d∣m,则 a ≡ b ( m o d d ) a≡b(mod\ d) a≡b(mod d)
- 若 a ≡ b ( m o d m ) a≡b(mod\ m) a≡b(mod m),则 ( a , m ) = ( b , m ) (a,m)=(b,m) (a,m)=(b,m),其中 ( a , m ) (a,m) (a,m)为 a a a和 m m m的最大公约数
- a ≡ b ( m o d m i ) ( 1 ≤ i ≤ n ) a≡b(mod\ m_i)\ (1≤i≤n) a≡b(mod mi) (1≤i≤n),同时成立,当且仅当 a ≡ b ( m o d [ m 1 , m 2 , . . . , m n ] ) a≡b(mod[m_1,m_2,…,m_n]) a≡b(mod[m1,m2,...,mn])
证明上式1, 若 a ≡ b ( m o d m ) a≡b(mod\ m) a≡b(mod m) ,则 a x ≡ b x ( m o d m ) ax≡bx(mod\ m) ax≡bx(mod m),令 x d = m xd=m xd=m,两边同除 x x x, a ≡ b ( m o d m g c d ( m , x ) ) a≡b(mod\ \frac{m}{gcd(m,x)}) a≡b(mod gcd(m,x)m), g c d ( m , x ) = x gcd(m,x)=x gcd(m,x)=x,即 a ≡ b ( m o d d ) a≡b(mod\ d) a≡b(mod d)
证明上式2,若 d d d为 a a a和 m m m的公约数,且 m ∣ ( a − b ) , d ∣ a , d ∣ m m|(a-b),d|a,d|m m∣(a−b),d∣a,d∣m,所以 d ∣ b d|b d∣b,对于所有 d d d上式都成立,反之亦然成立,即 a a a与 m m m和 b b b与 m m m的公约数集相同,所以 ( a , m ) = ( b , m ) (a,m)=(b,m) (a,m)=(b,m)
一元线性同余方程
定义: a , b a,b a,b是整数, m m m是正整数,形如 a x ≡ b ( m o d m ) ax≡b(mod\ m) ax≡b(mod m),且 x x x是未知整数的同余式称为一元线性同余方程.
定理: a , b a,b a,b是整数, m m m是正整数, ( a , m ) = d (a,m)=d (a,m)=d.如果 d ∣ b d|b d∣b,则方程恰有 d d d个模 m m m的不同余的解,否则方程无解。
证明:方程有解时, ( a x − b ) = y m (ax-b)=ym (ax−b)=ym, y y y为整数,即 a x − y m = b ax-ym=b ax−ym=b,由裴蜀定理可知,对任何整数 a 、 b a、b a、b和它们的最大公约数 d d d,关于未知数 x x x和 y y y的线性不定方程(称为裴蜀等式):若 a , b a,b a,b是整数,且 g c d ( a , b ) = d gcd(a,b)=d gcd(a,b)=d,那么对于任意的整数 x , y x,y x,y,都有 a x + b y ax+by ax+by一定是 d d d的倍数,特别地,一定存在整数 x , y x,y x,y,使 a x + b y = d ax+by=d ax+by=d成立。因为y为整数,不是定值,所以把上式化为 a d x − m d y = b d \frac{a}{d}x-\frac{m}{d}y=\frac{b}{d} dax−dmy=db,随着 y y y值变化, x x x存在 d d d个不同余的解。所以如果 ( a , m ) = d (a,m)=d (a,m)=d, d ∣ b d|b d∣b,那么方程恰有 d d d个不同余解 , d d d个解分别关于 m d \frac{m}{d} dm同余,分别为 x , x + m d , x + 2 ∗ m d , . . . , x + ( d − 1 ) ∗ m d x,x+\frac{m}{d},x+2*\frac{m}{d},…,x+(d-1)*\frac{m}{d} x,x+dm,x+2∗dm,...,x+(d−1)∗dm
求解一元线性同余方程时可以使用扩展欧几里得算法.
void exgcd(int a,int b,int&d,int&x,int&y)//扩展欧几里得算法 {
if(b==0) {
x=1,y=0; d=a; return; } else {
int r=exgcd(b,a%b,x,y); //r=GCD(a,b)=GCD(b, a%b) int t=x; x=y; y=t-a/b*y ; return; } }
int f(int a,int b,int m)//计算同余方程所有解 {
int x,y,d; exgcd(a,m,d,x,y); if(b%d) return -1;//无解 x=x*(b/d)%m; for(int i=1;i<=d;i++) ans[i]=(x+(i-1)*m/d)%m; }
一元线性同余方程组
任意的一元线性同余方程组都可以化为 x ≡ b ( m o d m ) x≡b(mod\ m) x≡b(mod m),而一元线性同余方程组就是多个这样的式子联合求解。
例如: x ≡ b 1 ( m o d m 1 ) x≡b_1(mod\ m_1) x≡b1(mod m1) 与 x ≡ b 2 ( m o d m 2 ) x≡b_2(mod\ m_2) x≡b2(mod m2),这两个方程就构成了一个同余方程组。
令 m = [ m 1 , m 2 ] m=[m_1,m_2] m=[m1,m2],此时方程组有解的充分必要条件是 ( m 1 , m 2 ) ∣ b 1 − b 2 (m_1,m_2)|b_1-b_2 (m1,m2)∣b1−b2,此时方程仅有一个非负整数解。
证明:讲两式写为 x = b 1 + m 1 y 1 , x = b 2 + m 2 y 2 x=b_1+m_1y_1,x=b_2+m_2y_2 x=b1+m1y1,x=b2+m2y2,联立可得 b 1 + m 1 y 1 = b 2 + m 2 y 2 b_1+m_1y_1=b_2+m_2y_2 b1+m1y1=b2+m2y2,即 m 1 y 1 − m 2 y 2 = b 1 − b 2 m_1y_1-m_2y_2=b_1-b_2 m1y1−m2y2=b1−b2,由裴蜀定理可知成立。此时方程的解即为 ( b 1 + m 1 y 1 ) % m (b_1+m_1y_1)\%m (b1+m1y1)%m或 ( b 2 + m 2 y 2 ) % m (b_2+m_2y_2)\%m (b2+m2y2)%m
上面式子 m 1 y 1 − m 2 y 2 = b 1 − b 2 m_1y_1-m_2y_2=b_1-b_2 m1y1−m2y2=b1−b2可由扩展欧几里得求解 y 1 y_1 y1和 y 2 y_2 y2.
对于多个方程的方程组,这样两两求解合并即可求出最后的解。
int solve() {
int n,m1,b1,m2,b2,x,y,d,flag=1; cin>>n>>m1>>b1; for(int i=1;i<n;i++) {
cin>>m2>>b2; int c=b2-b1; exgcd(m1,m2,d,x,y); if(c%d!=0) flag=0; x=(x*c/d)%(m2/d);//求小于m2/d的解 b1=m1*x+b1; m1=m1*(m2/d);//合并后m应为m1和m2的最小公倍数 } if(flag) return b1; else return -1; }
中国剩余定理
int m[maxx]; int intChina(int n) {
int M=1,Mi,x0,y0,d,ans=0; for(int i=1;i<=n;i++) M*=m[i]; for(int i=1;i<=n;i++) {
Mi=M/m[i]; exgcd(Mi,m[i],d,x0,y0) ans=(ans+Mi*x0*a[i])%M; } return ans; }
由中国剩余定理可得的两个定理
- 若 a , b a,b a,b是正整数,那么有 ( 2 a − 1 , 2 b − 1 ) = 2 ( a , b ) − 1 (2^a-1,2^b-1)=2^(a,b)-1 (2a−1,2b−1)=2(a,b)−1.
- 正整数 2 a − 1 , 2 b − 1 2a-1,2b-1 2a−1,2b−1是互质的,当且仅当a与b是互质的。
#include <iostream> #include <algorithm> using namespace std; typedef long long ll; const int maxx=1e6+7,M=21252; void exgcd(int a,int b,int&d,int&x,int&y) {
if(b==0) {
x=1,y=0; d=a; return; } else {
exgcd(b,a%b,d,x,y); int t=x; x=y; y=t-a/b*y ; return; } } int m[maxx],a[maxx]; int intChina(int n) {
int Mi,x0,y0,d,ans=0; for(int i=1;i<=n;i++) {
Mi=M/m[i]; exgcd(Mi,m[i],d,x0,y0); ans=(ans+Mi*x0*a[i])%M; } return ans; } int main() {
ios::sync_with_stdio(0); int p,e,i,d,s=1; m[1]=23,m[2]=28,m[3]=33; while(cin>>p>>e>>i>>d&&p!=-1) {
a[1]=p; a[2]=e; a[3]=i; int ans=intChina(3); while(ans<=d) ans+=M; cout<<"Case "<<s++<<": the next triple peak occurs in "<<ans-d<<" days."<<endl; } }
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/132625.html