莫欺少年穷,修仙之旅在这开始—>算法基础课题解
推导过程: xmod x=k_1a_1+m_1=k_2a_2+m_2 k_1a_1-k_2a_2=m_2-m_1 令\;d=exgcd(a_1,a_2,k_3,k_4) k_3a_1-k_4a_2=d k_1=k_3 \cdot \dfrac{m_2-m_1}{d} 令\;k_1=k_1+k \cdot \dfrac{a_2}{d},k_2=k_2+k \cdot \dfrac{a_1}{d} \begin{aligned} 故\;x&=k \cdot \dfrac{a_1a_2}{d}+k_1a_1+m_1\\\\&=ka_0+m_0\end{aligned}
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL exgcd(LL a,LL b,LL &x,LL &y)
{
if(!b)
{
x=1,y=0;
return a;
}
LL d=exgcd(b,a%b,y,x);
y-=a/b*x;
return d;
}
LL mod(LL a,LL b)
{
return (a%b+b)%b;
}
int main()
{
int n;
cin>>n;
LL a1,m1;
cin>>a1>>m1;
for(int i=0;i<n-1;i++)
{
LL a2,m2;
cin>>a2>>m2;
LL k1,k2;
LL d=exgcd(a1,a2,k1,k2);
if((m2-m1)%d)
{
cout<<-1<<endl;
return 0;
}
k1=mod(k1*(m2-m1)/d,a2/d);
m1=k1*a1+m1;
a1=a1/d*a2;
}
cout<<m1<<endl;
return 0;
}