Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- long long diophantine(long long a1,long long b1,long long a2,long long b2)
- {
- long long a,b,c,d,m,n,xm,ym,xn,yn,q,r,xr,yr,p,tam;
- c=b2-b1;
- a=a1;
- b=a2;
- d=__gcd(a,b);
- m=a;
- n=b;
- xm=1; ym=0;
- xn=0; yn=1;
- while(n!=0) {
- q=m/n;
- r=m%n;
- xr=xm-q*xn;
- yr=ym-q*yn;
- m=n; xm=xn; ym=yn;
- n=r; xn=xr; yn=yr;
- }
- xm*=c/d;
- ym*=c/d;
- p=b/d;
- q=a/d;
- if(xm<0) {
- tam=(abs(xm)/p)+1;
- xm+=p*tam;
- ym-=q*tam;
- }
- return xm;
- }
- deque<long long> s;
- int main() {
- long long i,t,t1,t2,tam,a1,b1,a2,b2,tam2;
- cin >> t;
- for(i=1;i<=t;i++) {
- cin >> t1 >> t2;
- if(t1<0) {
- tam=t2-abs(t1)%t2;
- }
- else
- tam=t1%t2;
- s.push_back(tam);
- s.push_back(t2);
- }
- if(t==1) {cout << 1; return 0;}
- if(t==1) {
- a1=s.back(); s.pop_back();
- a2=s.back(); s.pop_back();
- if(a1<0) {
- cout << t2-abs(tam)%t2;
- }
- }
- while(!s.empty()) {
- a1=s.back(); s.pop_back();
- b1=s.back(); s.pop_back();
- a2=s.back(); s.pop_back();
- b2=s.back(); s.pop_back();
- tam=diophantine(a1,b1,a2,b2)%a2;
- tam2=a1*a2;
- tam=a1%tam2*tam%tam2+b1;
- if(s.empty()) break;
- s.push_back(tam%tam2);
- s.push_back(tam2);
- //cout << tam << tam2;
- }
- cout << tam%tam2;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement