求解模线性方程组(中国剩余定理)
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
求解模线性方程组(中国剩余定理)
最新推荐文章于 2020-08-30 11:10:12 发布