Pagini recente » Cod sursa (job #213730) | Cod sursa (job #478880) | Cod sursa (job #2029143) | Cod sursa (job #1653591) | Cod sursa (job #1793843)
#include <cstdio>
const int MAX_N = 500;
const int MAX_NR = 1000;
long long d[1+MAX_NR];
int gcd[1+MAX_NR][1+MAX_NR];
int getGcd(int a, int b) {
if(gcd[a][b] == 0) {
if(a % b == 0)
gcd[a][b] = gcd[b][a] = b;
else
gcd[a][b] = gcd[b][a] = getGcd(b, a % b);
}
return gcd[a][b];
}
int main() {
int n, x;
for(int i = 1; i <= MAX_NR; ++i)
for(int j = 1; j <= MAX_NR; ++j)
getGcd(i, j);
FILE *fin = fopen("indep.in", "r");
fscanf(fin, "%d", &n);
for(int i = 0; i < n; ++i) {
fscanf(fin, "%d", &x);
for(int g = 1; g <= MAX_NR; ++g) {
for(int j = g; j <= MAX_NR; j = j + g)
if(gcd[j][x] == g)
d[g] += d[j];
}
d[x]++;
}
fclose(fin);
FILE *fout = fopen("indep.out", "w");
fprintf(fout, "%lld", d[1]);
fclose(fout);
return 0;
}