求解模线性方程组(中国剩余定理)
x=a1 mod m1
x=a2 mod m2
......
x=an mod mn 其中,a[],m[]已知,m[i]>0且m[i]与m[j]互质,求x.
普通的中国剩余定理要求所有的m是互素
有整数解。并且在模下的解是唯一的,解为
int CRT(int a[],int m[],int n)
{
int M = 1;
int ans = 0;
for(int i=1; i<=n; i++)
M *= m[i];
for(int i=1; i<=n; i++)
{
int x, y;
int Mi = M / m[i];
extend_Euclid(Mi, m[i], x, y);
ans = (ans + Mi * x * a[i]) % M;
}
if(ans < 0) ans += M;
return ans;
}
人自出生起就有体力,情感和智力三个生理周期,分别为23,28和33天。一个周期内有一天为峰值,在这一
天,人在对应的方面(体力,情感或智力)表现最好。通常这三个周期的峰值不会是同一天。现在给出三个日
期,分别对应于体力,情感,智力出现峰值的日期。然后再给出一个起始日期,要求从这一天开始,算出最少
再过多少天后三个峰值同时出现。
0 0 0 0
0 0 0 100
5 20 34 325
4 5 6 7
283 102 23 320
203 301 203 40
-1 -1 -1 -1
Case 1: the next triple peak occurs in 21252 days.
Case 2: the next triple peak occurs in 21152 days.
Case 3: the next triple peak occurs in 19575 days.
Case 4: the next triple peak occurs in 16994 days.
Case 5: the next triple peak occurs in 8910
求解模线性方程组(中国剩余定理)
最新推荐文章于 2025-08-08 11:19:18 发布
本文介绍了如何使用中国剩余定理来求解模线性方程组,展示了算法实现并提供了实际应用例子,如计算三个生理周期的峰值同步出现的日期。此外,还给出了两个不同版本的C++实现来解决不互素的情况。

最低0.47元/天 解锁文章
1030

被折叠的 条评论
为什么被折叠?



