Pagini recente » Cod sursa (job #2422521) | Cod sursa (job #3189806) | Cod sursa (job #718435) | Cod sursa (job #3228527) | Cod sursa (job #2400582)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("indep.in");
ofstream fout("indep.out");
const int baza = 100000;
int n, x;
int one[200], dp[1002][200];
void aduna (int a[], int b[]) {
int t = 0, aux;
a[0] = max(a[0], b[0]);
for (int i = 1; i <= max(a[0], b[0]); i++) {
aux = a[i] + b[i] + t;
a[i] = aux % baza;
t = aux / baza;
}
while(t) {
a[++a[0]] = t % baza;
t /= baza;
}
}
int gcd (int a, int b) {
int r;
while (b) {
r = a % b;
a = b;
b = r;
}
return a;
}
int main ()
{
fin >> n;
one[0] = one[1] = 1;
for (int i = 1; i <= n; i++) {
fin >> x;
for (int j = 1; j <= 1000; j++) {
aduna(dp[gcd(x, j)], dp[j]);
}
aduna(dp[x], one);
}
int i,val;
fout << dp[1][dp[1][0]];
for(int i = dp[1][0] - 1; i >= 1; i--) {
int nr = baza / 10;
while(nr > 1 && nr > dp[1][i]) {
fout << 0;
nr /= 10;
}
fout << dp[1][i];
}
return 0;
}