48分求调,求大佬帮助
查看原帖
48分求调,求大佬帮助
850746
steven20221025楼主2023/9/11 20:47
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
struct equ
{
	long long remainder;
	long long model;
};
long long w1,w2,W1,W2;int T;
queue<equ> n;
equ ans,a,b;
long long ll;
long long gcd(long long x,long long y)
{
	for(;(x!=0)&&(y!=0);)
	{
		x%=y;
		swap(x,y);
	}
	return (x+y);
}
long long lcm(long long x,long long y)
{
	return (x/gcd(x,y)*y);
}
void bezout(long long a,long long b,long long &s,long long &t)
{
	long long r1=a,r2=b,s1=1,s2=0,t1=0,t2=1;
	long long q,r;
	while(r2>0)
	{
		q=r1/r2;
		r=r1-(q*r2);
		r1=r2;
		r2=r;
		s=s1-(q*s2);
		s1=s2;
		s2=s;
		t=t1-(q*t2);
		t1=t2;
		t2=t;
	}
	s=s1;
	t=t1;
}
void work()
{
	for(;;)
	{
		if(n.size()==1)
		{
			return;
		}
		else
		{
			a=n.front();n.pop();
			b=n.front();n.pop();
			long long s=0,t=0;
			bezout(a.model,b.model,s,t);
			ll=lcm(a.model,b.model);
			n.push((equ){((s*(b.remainder-a.remainder)/gcd(a.model,b.model)*a.model+a.remainder)%ll+ll)%ll,ll});
		}
	}
}
int main()
{
	scanf("%d",&T);
	for(int i=0;i<T;i++)
	{
		scanf("%lld%lld",&w1,&w2);
		n.push((equ){w2,w1});
	}
	work();
	ans=n.front();
	printf("%lld",(ans.remainder)%ll);
	return 0;
}
2023/9/11 20:47
加载中...