Pagini recente » Cod sursa (job #1516451) | Cod sursa (job #433383) | Cod sursa (job #2762469) | Cod sursa (job #2963323) | Cod sursa (job #2705251)
#include <bits/stdc++.h>
#define ll long long
#define base 100000000
using namespace std;
ifstream fin("indep.in");
ofstream fout("indep.out");
int n, el;
vector <int> pd[2][1005];
void aduna(vector <int> &a, vector <int> b) {
if (a.size() < b.size())
swap(a, b);
for (int i = 0; i < a.size(); ++i) {
if (i < b.size())
a[i] += b[i];
if (a[i] >= base) {
if (i + 1 >= a.size())
a.push_back(1);
else
++a[i + 1];
a[i] -= base;
}
}
return;
}
int main() {
fin >> n;
bool turn = false;
vector <int> one;
one.push_back(1);
for (int i = 1; i <= n; ++i) {
fin >> el;
for (int j = 1; j <= 1000; ++j)
pd[turn][j] = pd[!turn][j];
for (int j = 1; j <= 1000; ++j)
aduna(pd[turn][__gcd(el, j)], pd[!turn][j]);
if (pd[turn][el].empty())
pd[turn][el].push_back(1);
else
aduna(pd[turn][el], one);
turn = !turn;
}
for (int i = pd[!turn][1].size() - 1; i >= 0; --i) {
if (i < pd[!turn][1].size() - 1) {
ll nr = pd[!turn][1][i];
while (nr * 10 < base)
fout << 0, nr *= 10;
}
fout << pd[!turn][1][i];
}
return 0;
}