欢迎大家访问我的老师的OJ———caioj.cn
题目描述
思路
详细参考
这道题输入有坑,且多组数据。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#define ll long long
using namespace std;
ll exgcd(ll a,ll b,ll &x,ll &y)
{
if(!b){x=1;y=0;return a;}
ll tx,ty,d=exgcd(b,a%b,tx,ty);
x=ty;y=tx-(a/b)*ty;
return d;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
bool bk=true;
ll x1,x2,m1,m2;scanf("%lld%lld",&m1,&x1);
for(int i=1;i<n;i++)
{
scanf("%lld%lld",&m2,&x2);
if(bk==false)continue;
ll a=m1,b=m2,x,y,k=x2-x1;ll d=exgcd(a,b,x,y);
if(k%d){bk=false;continue;}
x=(x*(k/d)%(b/d)+b/d)%(b/d);
x1=x1+x*m1;m1=m1*m2/d;
}
if(!bk)puts("-1");
else printf("%lld\n",x1);
}
return 0;
}

本文深入探讨了中国剩余定理在解决特定数学问题中的应用,通过实例讲解了如何使用扩展欧几里得算法求解未知数。文章提供了一段C++代码实现,展示了在多组数据输入下,如何避免陷阱并正确解决问题。
1万+

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



