社区讨论

求调 exCRT WA #15

P4777【模板】扩展中国剩余定理(EXCRT)参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mifwdelc
此快照首次捕获于
2025/11/26 19:04
3 个月前
此快照最后确认于
2025/11/26 19:49
3 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=5e3+5,mod=1e9+7;
int exgcd(int a,int b,int &x,int &y)
{
	if(b==0)
	{
		x=1,y=0;
		return a;
	}
	int ans=exgcd(b,a%b,y,x);
	y-=(a/b)*x;
	return ans;
}
signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	int n;
	cin>>n;
	int b,a;
	cin>>a>>b;
	int A=a;
	__int128 B=b;
	for(int i=2;i<=n;i++)
	{
		cin>>a>>b;
		int gcd=__gcd(a,A);
		int lcm=a/gcd*A;
		int c1,c2;
		exgcd(A,a,c1,c2);
//		cout<<c1<<' '<<c2<<'\n';
		c1=-c1;
		int k=b-B;
		c1*=k/gcd,c2*=k/gcd;
		B=((__int128)B%lcm-(__int128)c1%lcm*(__int128)A%lcm)%lcm+lcm;
		B%=lcm;
		A=lcm;
	}
	cout<<(long long)B;
    return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...