首页 技术 正文
技术 2022年11月12日
0 收藏 998 点赞 3,774 浏览 1369 个字

设正整数$m_1, m_2, … , m_r$两两互素,对于同余方程组

$x ≡ a_1 \ (mod \ m_1)$

$x ≡ a_2 \ (mod \ m_2)$

$…$

$x ≡ a_r \ (mod \ m_r)$

有整数解。设$P = \prod\limits_{k = 1}^{r} m_k$,则有

$$x ≡ a_1 M_1 M_1^{-1} + a_2 M_2 M_2^{-1} + … + a_r M_r M_r^{-1}\ ( \ mod \ P)$$

其中,$M_i = \frac{P}{m_i}$,$M_i^{-1}$为$M_i$在模$m_i$意义下的乘法逆元

证明:

对于每一个同余方程分开求解,设各个方程的解分别为$x_i$,则答案为$\sum\limits_{i = 1}^{r}x_i$。

若对于$k≠i$,都有$m_k|x_i$,则最终累积答案的时候对当前同余方程产生影响的只有$x_i$

因此$x_i$应当为$\frac{P}{m_i}$的倍数,且满足$x_i ≡ a_i \ (mod \ m_i)$

由于$M_i = \frac{P}{m_i}$,因此求出$M_i$在模$m_i$意义下的逆元$M_i^{-1}$,可得$M_i M_i^{-1} ≡ 1 \ (mod \ m_i)$

同时乘以$a_i$即可得$a_i M_i M_i^{-1} ≡ a_i \ (mod \ m_i)$

由于$x_i ≡ a_i M_i M_i^{-1} \ (mod \ m_i)$

所以$x = a_1 M_1 M_1^{-1} + a_2 M_2 M_2^{-1} + … + a_r M_r M_r^{-1}$

若要求x的最小正整数值,$mod \ P$即可:$x ≡ a_1 M_1 M_1^{-1} + a_2 M_2 M_2^{-1} + … + a_r M_r M_r^{-1}\ ( \ mod \ P)$

代码实现

/*By DennyQi*/
#include <cstdio>
#include <queue>
#include <cstring>
#include <algorithm>
#define r read()
using namespace std;
inline int read(){
int x = ; int w = ; register int c = getchar();
while(c ^ '-' && (c < '' || c > '')) c = getchar();
if(c == '-') w = -, c = getchar();
while(c >= '' && c <= '') x = (x << ) + (x << ) + c - '', c = getchar(); return x * w;
}
int K,P=,x,y;
int a[],b[];
void exgcd(int M, int B){
if(!B){
x = , y = ;
return;
}
exgcd(B, M%B);
int tmp = x;
x = y;
y = tmp - (M / B) * y;
}
int GetInv(int M, int B){
exgcd(M, B);
return (x + B) % B;
}
inline void CRT(){
int M,inv,ans=;
for(int i = ; i <= K; ++i){
M = P / b[i];
inv = GetInv(M, b[i]);
ans = (ans + a[i]*M*inv) % P;
}
printf("%d", ans);
}
int main(){
K = r;
for(int i = ; i <= K; ++i) a[i] = r;
for(int i = ; i <= K; ++i) b[i] = r, P *= b[i];
CRT();
return ;
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,905
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,430
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,247
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,058
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,690
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,727