中国剩余定理(1)

5 篇文章 0 订阅

问题

今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?

解法

简单点说就是,存在一个数x,除以3余2,除以5余三,除以7余二,然后求这个数。
做着题前需要先知道一下两个定理。

定理1:两个数相加,如果存在一个加数,不能被整数a整除,那么它们的和,就不能被整数a整除。

定理2:两数不能整除,若除数扩大(或缩小)了几倍,而被除数不变,则其商和余数也同时扩大(或缩小)相同的倍数(余数必小于除数)。

现给出求解该问题的具体步骤:

1、求出最小公倍数

lcm=3 * 5 * 7=105

2、求各个数所对应的基础数

(1)105÷3=35
35÷3=11…2 //基础数35

(2)105÷5=21
21÷5=4…1
把1扩大3倍得到3,那么被除数也扩大3倍,得到21*3=63//基础数63

3、105÷7=15
15÷7=2…1
把1扩大2倍得到2,那么被除数也扩大2倍,得到15*2=30//基础数30

把得到的基础数加和(注意:基础数不一定就是正数)

35+63+30=128

4、减去最小公倍数lcm(在比最小公倍数大的情况下)

x=128-105=23

那么满足题意得最小的数就是23了。

模板代码

//中国剩余定理模板
typedef long long ll;
ll china(ll a[],ll b[],int n)//a[]为除数,b[]为余数
{
    ll M=1,y,x=0;
    for(int i=0;i<n;++i)  //算出它们累乘的结果
        M*=a[i];
    for(int i=0;i<n;++i)
    {
        ll w=M/a[i];
        ll tx=0;
        int t=exgcd(w,a[i],tx,y);  //计算逆元
        x=(x+w*(b[i]/t)*x)%M; 
    }
    return (x+M)%M;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值