中国剩余定理

剩余定理是中国古代求解一次同余式组(同余)的方法,设有一个数除三余二,除五余三.除七余二,问最小是多少

 

1.求出最小公倍数3*5*7=105

2.105÷5=21

 21÷5=4......1

 定理2把1扩大3倍得到3,那么被除数也扩大3倍,得到21*3=63//基础数63

3.105÷7=15

15÷7=2......1

定理2把1扩大2倍得到2,那么被除数也扩大2倍,得到15*2=30//基础数30

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

35+63+30=128

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

x=128-105=23

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

 

代码模板

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 
 5 int exgcd(int a,int b,int &x,int &y)
 6 {
 7     int d;
 8     if(b==0)
 9     {
10         x=1;y=0;
11         return a;
12     }
13     d=exgcd(b,a%b,y,x);
14     y-=(a/b)*x;
15     return d;
16 }//扩展欧几里得算法求解逆元
17 
18 int china(int r[],int p[],int len)//r为余数,p为任意数x
19 {
20     int M=1,m,x,y,sum=0;
21     for(int i=0;i<len;i++) M*=p[i];
22     for(int i=0;i<len;i++)
23     {
24         m=M/p[i];//除去自身的除数
25         exgcd(p[i],m,x,y);//乘法逆元计算w[i]*x+m*y=gcd(w[i],m)的一个解y  
26         sum=(y*m*r[i]+sum)%M;//累加整数解y并不断对M取余,m相当于基础数,r为余数,m若扩展欧几里得ab互素,则为1
27     }
28 
29     return (M+sum%M)%M;//使得求出的书最小
30 }

 

转载于:https://www.cnblogs.com/Fy1999/p/8858404.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值