Pagini recente » Cod sursa (job #951038) | Cod sursa (job #1854528) | Cod sursa (job #372017) | Cod sursa (job #188406) | Cod sursa (job #214646)
Cod sursa(job #214646)
#include<stdio.h>
#define lg 505
#define nrm 50
int n, i, j, k, sol[nrm], a[lg][40][nrm], q[lg][40], poz[lg][1005], v[lg], x;
void add(int a[], int b[]){
int i, p = 0;
for (i = 1; i <= a[0] || i <= b[0] || p; i ++, p /= 10)
a[i] = (p += a[i] + b[i]) % 10;
a[0] = i-1;
}
int gcd(int a, int b){
if (!b)
return a;
return gcd(b, a % b);
}
int main()
{
freopen("indep.in", "rt", stdin);
freopen("indep.out", "wt", stdout);
scanf("%d", &n);
for (i = 1; i <= n; i ++){
scanf("%d", &v[i]);
for (j = 1; j*j <= v[i]; j ++)
if (v[i] % j == 0){
q[i][++ q[i][0]] = j; poz[i][j] = q[i][0];
q[i][++ q[i][0]] = v[i] / j; poz[i][v[i] / j] = q[i][0];
}
a[i][2][0] = a[i][2][1] = 1;
}
if (v[1] == 1)
sol[0] = sol[1] = 1;
for (i = 2; i <= n; i ++){
for (j = 1; j < i; j ++)
for (k = 1; k <= q[j][0]; k ++){
x = gcd(v[i], q[j][k]);
add(a[i][poz[i][x]], a[j][k]);
}
add(sol, a[i][1]);
}
for (i = sol[0]; i; i --)
printf("%d", sol[i]);
if (!sol[0])
printf("0");
printf("\n");
return 0;
}