#include #include #include using namespace std; struct no_solution {}; typedef long long int integer; pair xgcd(integer a, integer b) { if (b == 0) return make_pair(1, 0); pair p = xgcd(b, a%b); return make_pair(p.second, p.first - (a/b)*p.second); } integer gcd(integer a, integer b) { while(b != 0) { integer r = a % b; a = b; b = r; } return a; } integer lcm(integer a, integer b) { return a/gcd(a, b)*b; } integer divide(integer a, integer b, integer m) { b -= b/m*m; if (b < 0) b += m; integer g = gcd(a, m); if (b%g != 0) throw no_solution(); pair p = xgcd(a, m); //cout << p.first << ',' << a << ',' << p.second << ',' << m << endl; assert(p.first*a + p.second*m == gcd(a, m)); integer n = p.first * b / g; integer dn = m / g; n -= n/dn*dn; if (n < 0) n += dn; return n; } int main() { ifstream fin("moduloscope.in"); int n; while(fin >> n && n != 0) { { integer a; fin >> a; } integer a, b; a = 0; b = 1; for(int d = 2; d <= n; d++) { integer c; fin >> c; integer k = divide(b, c-a, d); integer new_a = a + b*k; integer new_b = lcm(b, d); a = new_a; b = new_b; //cout << d << ": " << a << " + " << b << "k" << endl; } cout << a << endl; } return 0; }