Pagini recente » Cod sursa (job #639494) | Cod sursa (job #2665675) | Cod sursa (job #1110894) | Cod sursa (job #3217463) | Cod sursa (job #2591779)
#include <iostream>
#include <stdio.h>
using namespace std;
int d[1005][101];
void adunare (int p1, int p2) {
int n1, n2, x, r, i;
n1 = d[p1][0];
n2 = d[p2][0];
n1 = n2 = d[p1][0] = max(n1, n2);
r = 0;
for (i = 1; i <= n1; i++) {
x = d[p1][i] + d[p2][i] + r;
d[p1][i] = x % 10;
r = x / 10;
}
if (r == 1){
d[p1][n1 + 1] = 1;
d[p1][0]++;
}
}
int cmmdc (int a, int b) {
int r;
while (b > 0) {
r = a % b;
a = b;
b = r;
}
return a;
}
int main() {
freopen ("indep.in", "r", stdin);
freopen ("indep.out", "w", stdout);
int n, i, j, nr;
d[0][0] = d[0][1] = 1;
scanf ("%d", &n);
for (i = 1; i <= n; i++) {
scanf ("%d", &nr);
for (j = 1; j <= 1000; j++)
if (d[j][0] > 0)
adunare(cmmdc(nr, j), j);
//d[cmmdc(nr, j)] += d[j];
adunare(nr, 0);
}
if (d[1][0] == 0)
printf ("0");
else {
for (i = d[1][0]; i >= 1; i--)
printf ("%d", d[1][i]);
}
return 0;
}