Pagini recente » Cod sursa (job #2729115) | Cod sursa (job #2578568) | Cod sursa (job #2542851) | Cod sursa (job #1192047) | Cod sursa (job #1235382)
#include <stdio.h>
#define MOD 1000000000
#define MAXN 500
#define MAXEL 1000
#define MAXL 25
int v[MAXN];
int d[MAXEL + 1][MAXL], len[MAXEL + 1];
int cmmdc(int a, int b){
int r;
while(b > 0){
r = a % b;
a = b;
b = r;
}
return a;
}
void add(int *v1, int l1, int *v2, int *l2){
int i, max = l1;
if(max < *l2) max = *l2;
for(i = 0; i < max; i++) v2[i] += v1[i];
i = 0;
while(i < max || v2[i] != 0){
v2[i + 1] += v2[i] / MOD;
v2[i] %= MOD;
if(i > *l2) *l2 = i;
i++;
}
if(v2[*l2] != 0) (*l2)++;
}
int main(){
FILE *in = fopen("indep.in", "r");
int n, i, j;
fscanf(in, "%d", &n);
for(i = 0; i < n; i++){
fscanf(in, "%d", &v[i]);
}
fclose(in);
int a, unu[1] = {1};
for(i = 0; i < n; i++){
for(j = 1; j <= MAXEL; j++){
a = cmmdc(j, v[i]);
add(d[j], len[j], d[a], &len[a]);
}
add(unu, 1, d[v[i]], &len[v[i]]);
}
FILE *out = fopen("indep.out", "w");
int cons;
for(i = len[1] - 1; i >= 0; i--){
cons = MOD;
while(d[1][i] / cons == 0) cons /= 10;
while(cons > 0){
fputc(d[1][i] / cons + '0', out);
d[1][i] %= cons;
cons /= 10;
}
}
if(len[1] == 0) fputc('0', out);
fclose(out);
return 0;
}