1 条题解

  • 1
    @ 2025-2-22 11:58:02

    板子中国剩余定理

    #include<cstdio>
    #include<bits/stdc++.h>
    #define ll long long 
    using namespace std;
    int n,a[11],b[11];
    long long M=1,x,y,ans;
    ll exgcd(ll A,ll B,ll &x,ll &y)
    {
    	if(B==0) {
    		
    		x=1;
    		y=0;
    		return A;
    	}
    	ll k=exgcd(B,A%B,x,y);
    	ll z=x;
    	x=y;
    	y=z-y*(A/B);
    	return k;
    }
    int main()
    {
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++)
    	{
    		scanf("%d%d",&b[i],&a[i]);
    		M*=b[i];
    	}
    	for(int i=1;i<=n;i++)
    	{
    		ll mi=M/b[i];//记得开longlong!!我忘开直接100变80了
    		ll Gcd=exgcd(mi,b[i],x,y);
    	//	cout<<x<<' '<<ans;
    		ans=((ans+x*mi*a[i])%M+M)%M;
    		
    	}
    	cout<<(ans%M+M)%M;
    }
    

    信息

    ID
    1214
    时间
    1000ms
    内存
    512MiB
    难度
    7
    标签
    递交数
    30
    已通过
    8
    上传者