Pagini recente » preONI 2008 - Runda 4, Clasa a 9-a | Cod sursa (job #773091) | Cod sursa (job #676850) | Cod sursa (job #2396989) | Cod sursa (job #183445)
Cod sursa(job #183445)
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
#define MAX_N 510
#define MAX_M 1010
// Nr[x][y] = nr de subsiruri din primele x nr din sir care au cmmdc == y
// Nr[x][cmmdc(y, A[x])] += Nr[x-1][y]
long long Nr[MAX_N][MAX_M];
int A[MAX_N];
int n,i,j,mx;
int cmmdc(int a, int b) {
if ( a<b ) swap(a, b);
int r;
while ( b ) {
r = a%b; a = b; b = r;
}
return a;
}
int main() {
freopen("indep.in", "r", stdin);
freopen("indep.out","w",stdout);
scanf("%d", &n);
for ( i=0; i<n; ++i ) {
scanf("%d", A+i);
mx = max(A[i],mx);
}
Nr[0][A[0]] = 1;
for ( i=1; i<n; ++i ) {
for ( j=1; j<=mx; ++j ) {
Nr[i][j] = Nr[i-1][j];
int x = cmmdc(j,A[i]);
Nr[i][x] += Nr[i-1][j];
}
Nr[i][A[i]] += 1;
}
printf("%lld\n", Nr[n-1][1]);
return 0;
}