C/C++教程

中国剩余定理 P1495 【模板】中国剩余定理(CRT)/曹冲养猪

本文主要是介绍中国剩余定理 P1495 【模板】中国剩余定理(CRT)/曹冲养猪,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll; 
 4 const int N=1e5+5;
 5 ll a[N],mod[N],ans,n,mulsum=1;
 6 ll read()
 7 {
 8     ll x=0,f=1;char ch=getchar();
 9     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
10     while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
11     return x*f;
12 }
13 ll exgcd(ll a, ll b, ll &x, ll &y)
14 {
15     if(!b)
16     {
17         x=1,y=0;
18         return a;
19     }
20     ll d=exgcd(b,a%b,x,y);
21     ll t=x;
22     x=y;y=t-a/b*y;
23     return d;
24 }
25 int main()
26 {
27     ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
28     n=read();
29     for(int i=1;i<=n;i++)mod[i]=read(),a[i]=read(),mulsum*=mod[i];
30     for(int i=1;i<=n;i++)
31     {
32         ll x,y;
33         ll mi=mulsum/mod[i];
34         exgcd(mi,mod[i],x,y);
35         x=((x%mod[i])+mod[i])%mod[i];
36         ans=(ans+(x*mi*a[i]))%mulsum;    
37     }
38     cout<<ans<<"\n";
39     return 0;
40 }

 

这篇关于中国剩余定理 P1495 【模板】中国剩余定理(CRT)/曹冲养猪的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!