poj 2891 Strange Way to Express Integers

#include <iostream> #include <cstring> #include <cstdio> using namespace std; typedef long long LL; void Ex_Gcd(LL a, LL b, LL &d, LL &x, LL &y) { if(b == 0) { d = a; x = 1; y = 0; } else { Ex_Gcd(b, a%b, d, x, y); LL temp = x; x = y; y = temp - (a/b)*y; } } int main() { LL i, n, a1, a2, r1, r2, a, b, c, d, x0, y0; while(~scanf("%I64d", &n)) { bool flag = true; scanf("%I64d%I64d", &a1, &r1); for(i = 1; i < n; ++i) { scanf("%I64d%I64d", &a2, &r2); a = a1, b = a2, c = r2 - r1; Ex_Gcd(a, b, d, x0, y0); if(c % d != 0) flag = false; int t = b / d; x0 = x0 * (c/d); x0 = (x0%t + t)%t; r1 = a1 * x0 + r1; a1 = a1 * (a2/d); } if(flag) printf("%I64d\n", r1); else { printf("-1\n"); continue; } } return 0; } 

你可能感兴趣的:(同余问题)