中国剩余定理

1、互质

中国剩余定理是求解下面这一类问题
设m1,m2,…,mk是两两互素的正整数,即gcd(mi,mj) =1,i≠j,i,j = 1,2,…,k
则同余方程组:
x≡b1 (mod m1)
x≡b2 (mod m2)

x≡bk (mod mk)
模[m1,m2,…,mk]有唯一解,即在[m1,m2,…,mk]的意义下,存在唯一的x,满足:x≡bi mod [m1,m2,…,mk],i = 1,2,…,k
求解满足x的值

一个经典例题:
《孙子算经》中的题目:有物不知其数,三个一数余二,五个一数余三,七个一数又余二,问该物总数几何?

上面的例子化成数学公式就是
x ≡ 2 (mod 3) 式①
x ≡ 3 (mod 5) 式②
x ≡ 2 (mod 7) 式③
求解x

要懂中国剩余定理首先要知道两个定理:
定理1:两个数相加,如果存在一个加数,不能被整数a整除,那么它们的和,就不能被整数a整除。即:如果a%b=c,则 (a+k*b)%b=c

定理2:两数不能整除,若除数扩大(或缩小)了几倍,而被除数不变,则其商和余数也同时扩大(或缩小)相同的倍数(余数必小于除数)。即:如果a%b=c,(a * k)%c=k*c

假设x1%3=2,x2%5=3,x3%7=2;
根据定理1
1、
要使(x1+x2)%3=2,x2必须是3的倍数
要使(x1+x2)%5=3,x1必须是5的倍数
2、
要使(x1+x2+x3)%3=2,则x2、x3必须是3的倍数;
要使(x1+x2+x3)%5=3,则x1、x3必须是5的倍数;
要使(x1+x2+x3)%7=2,则x1、x2必须是7的倍数;
3、所以
x1是5、7的倍数;
x2是3、7的倍数;
x3是3、5的倍数;

求解过程:
  1. 假设x1=5 * 7=35;
    35%3=2            满足式①
    x1=35;
    即求(35 * x)+(3 * y)=2,中x的值(用扩展欧几里得求解)
  2. 假设x2=3 * 7=21;
    21%5=1
    根据定理2:(21 * 3)%5=3    满足式②
    x2=63
    即求(21 x)+(5 * y)=3,中x的值*
  3. 假设x3=3 * 5=15;
    15%7=1
    根据定理2:(15 * 2)%5=2    满足式③
    x3=30
    即求(35 * x)+(3 * y)=2,中x的值
  4. (x1+x2+x3)满足式①②③,但求得的值不一定是最小正整数,最后在对(3 * 5 * 7)取模即可
2、不互质

这个我不太会证明,下面这张图解释的也挺详细的

在这里插入图片描述

模板1
//除数两两互质的模板
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int Max=1e5+10;
typedef long long ll;
ll m[Max],r[Max];
ll exgcd(ll a,ll b,ll &x,ll &y)
{
   
    if(b==0)
    {
   
        x=1,y=0;
        return a;
    }
    ll gcd=exgcd(b,a%b,x,y);
    ll t=y;
    y=x-(a/b)*y;
    x=t;
    return gcd;
}
ll China(int n)
{
   
    ll sum=1,a,b,c,gcd,ans=0,x,y;
    for(int i=0;i<n;i++)
        sum*=m[i];
    for(int i=0;i<n;i++)
    {
   
        a=sum/m[i];b=m[i];c=r[i];
        gcd=exgcd(a,b,x,y);
        ans=(ans+a*x*(c/gcd))%sum;
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值