hdu 2891 中国剩余定理

时间:2022-05-04 21:13:15

从6点看到10点,硬是没算出来,早知道玩游戏去了,艹,明天继续看

不爽,起来再看,终于算是弄懂了,以后超过一个小时的题不会再看了,不是题目看不懂,是水平不够

 #include<cstdio>
using namespace std;
__int64 result,d;
int flag;
__int64 gcd(__int64 a,__int64 b,__int64 &x,__int64 &y)
{
__int64 t,ret;
if(!b)
{
x = ;
y = ;
return a;
}
ret=gcd(b,a%b,x,y);
t=x;
x=y;
y=t-a/b*y;
return ret;
}
void fun(__int64 a,__int64 b,__int64 n)
{
__int64 x,y;
d=gcd(a,n,x,y);
if(b%d!=)
flag =;
result=(x*(b/d)%n+n)%n;
}
int main()
{ __int64 a1,m1,a2,m2,t;
while(scanf("%I64d",&t)!=EOF)
{
scanf("%I64d %I64d",&m1,&a1);
t--;
flag=;
while(t--)
{
scanf("%I64d %I64d",&m2,&a2);
fun(m1,a2-a1,m2);
a1+=m1*result;
m1=m1*m2/d;
a1=(a1%m1+m1)%m1;
}
if(flag)
printf("-1\n");
else
printf("%I64d\n",a1);
}
return ;
}