一、题目
二、解题
1.题目
根据题目的提示,我们已经知道m,需要求解的是b,那我们先求解c,然后再求解b
2.代码
dev c++ 5.11
//202209-1 如此编码
#include<iostream>
using namespace std;
const int N=25;
int a[N],b[N],c[N];
int main(){
int n,m;
cin>>n>>m; // 输入 n 和 m
c[0]=1; // 初始化
for(int i=1;i<=n;i++){
cin>>a[i]; // 输入数组 a
c[i]=c[i-1]*a[i]; // 计算数组 c,即前缀积
}
for(int i=1;i<=n;i++){
b[i]=m%c[i]; // 计算数组 b 中的第 i 个元素
}
for(int i=n;i>=1;i--){
b[i]-=b[i-1]; // 先减去前一个元素的值
b[i]=b[i]/c[i-1]; // 再除以前一个前缀积的值,得到最终结果
}
for(int i=1;i<=n;i++){
cout<<b[i]<<' '; // 输出数组 b
}
return 0;
}
3.提交结果
总结
1.解释
可以这样理解:中国剩余定理是一种用于求解多个同余方程的方法。同余方程的形式是 x ≡ a (mod m),其中 x 是未知数,a 为已知数,m 为模数。
中国剩余定理对应的问题是:给定 k 个不同的模数 m1, m2, …, mk 和 k 个整数 a1, a2, …, ak,求解同时满足下列 k 个同余方程的 x 值:
x ≡ a1 (mod m1)
x ≡ a2 (mod m2)
…
x ≡ ak (mod mk)
当且仅当这些模数两两互质时,中国剩余定理保证上述同余方程存在唯一解,并且该解可以表示成 x = b1 * m1 * c1 + b2 * m2 * c2 + … + bk * mk * ck,其中 bi = mi 的乘法逆元 mod mi,ci 表示 x ≡ ai (mod mi) 的唯一解。
换言之,中国剩余定理将一个多项式同余问题转化为了一组线性同余问题,并通过一些计算得到了方程组的唯一解。在实际应用中,中国剩余定理广泛应用于密码学和编码领域,如RSA加密算法和多项式插值编码等。
2.其他
- 同余方程组