注:C++党适用
小学时,我们经常会看到一些题,例如:
有一批苹果,平均分给三个人剩余2个,分给5个人剩余3个,分给7个人剩余2个,求苹果的最小个数。
在初等数论中,我们可以把他表示为一连串的同余方程
如果再多一点,就变为
其中
我们如何解决这种问题呢?
我们从基本的讲起
首先我们要保证这个数除以是余
的,
我们找到这样的满足条件的最小数,然后再找满足除以是余
的数,但也要满足条件一,所以递增
,知道找到满足条件的数为止。
接下来我们就有规律了,假设上一次得出的得数是,接下来进行的是第
步,则递增
直到满足条件为止。
代码如下
int n;
int a[n], b[n];
int crt() {
long long mul = 1, ans = 0;
for (int i = 0; i < n; i++) {
while (ans % a[i] != b[i]) ans += mul;
mul *= a[i];
}
return ans;
}
以上就是中国剩余定理的解题方法