#include using namespace std; // gcd(a,b) = ax + by long long gcd( long long a, long long* x, long long b, long long* y ) { long long x0=1, x1=0; long long y0=0, y1=1; long long sign=1; while( b != 0 ) { long long r = a%b; long long q = a/b; a = b; b = r; long long tx1 = x1; long long ty1 = y1; x1 = q*x1 + x0; y1 = q*y1 + y0; x0 = tx1; y0 = ty1; sign = -sign; } if( a >= 0 ) { *x = sign * x0; *y = -sign * y0; return a; } else { *x = -sign * x0; *y = sign * y0; return -a; } } long long mod( long long a, long long b ) { long long m = a % b; return m>=0 ? m : m+b; } int main() { for(int n; cin>>n,n;) { long long R=0, M=1; // cur constraint : (==R mod M) for(long long N=1,S; N<=n; ++N) { cin >> S; // new constraint : (==S mod N) // composition: // R+pM == S+qN // pM == S-R mod N // p == (S-R)%N / gcd * x long long x, y, gcd_MN=gcd(M,&x,N,&y), lcm_MN=M*(N/gcd_MN); R = mod(R+mod(S-R, N)/gcd_MN*x*M, lcm_MN); M = lcm_MN; } cout << R << endl; } }