关于模线性方程,可以参考我的上一篇博文。
以下叙述及证明转自:http://972169909-qq-com.iteye.com/blog/1266328 作者 KIDx
问题描述:给出bi,ni的值,且n1, n2, n3,…, ni两两之间不一定互质,求Res的值?
解:采用的是合并方程的做法。
这里将以合并第一第二个方程为例进行说明
由上图前2个方程得(设k1、k2为某一整数):
Hdu 1573 X问题
#include
#define i64 __int64
i64 Md[15],w[15],n; //w[]保存余数
i64 Extended_Euclid (i64 a,i64 b,i64 &x,i64 &y)
{//扩展欧几里得算法,求ax+by=gcd(a,b)的一组解(x,y),d=gcd(a,b)
i64 d;
if (b==0)
{
x=1;y=0;
return a;
}
d=Extended_Euclid(b,a%b,y,x);
y-=a/b*x;
return d;
}
i64 Chinese_Remainder (i64 w[],i64 Md[],int len)
{//中国剩余定理不互质
bool flag=false;
i64 n1=Md[0], b1=w[0],x,y;
for (int i=1;i n)
return 0;
return (n-b1)/n1+1; //形成的解:b1, b1+n1, b1+2n1,..., b1+xni...
}
int main ()
{
#ifdef ONLINE_JUDGE
#else
freopen("read.txt","r",stdin);
#endif
int T,i,m;
scanf("%d",&T);
while (T--)
{
scanf("%d%d",&n,&m);
for (i=0;i
Hdu 3579 Hello Kiki
题意:n个m[i],和n个a[i],一个数对m[i]取模的值为a[i],求这个数,其中m[i]之间不一定互质
#include
#define i64 __int64
i64 Md[10],w[10]; //w[]保存余数
i64 Extended_Euclid (i64 a,i64 b,i64 &x,i64 &y)
{//扩展欧几里得算法,求ax+by=gcd(a,b)的一组解(x,y),d=gcd(a,b)
i64 d;
if (b==0)
{
x=1;y=0;
return a;
}
d=Extended_Euclid(b,a%b,y,x);
y-=a/b*x;
return d;
}
i64 Chinese_Remainder (i64 w[],i64 Md[],int len)
{//中国剩余定理不互质
bool flag=false;
i64 n1=Md[0], b1=w[0],x,y;
for (int i=1;i