Pagini recente » Cod sursa (job #727939) | Cod sursa (job #3213222) | Cod sursa (job #1692122) | Cod sursa (job #2923199) | Cod sursa (job #3173997)
#include <bits/stdc++.h>
using namespace std;
const int max_size = 1e3 + 1;
int dp[2][max_size][5 * max_size], unu[5 * max_size];
void sum (int x[], int y[], int s[])
{
int t = 0, i;
for (i = 1; i <= x[0] || i <= y[0] || t > 0; i++)
{
int aux = x[i] + y[i] + t;
s[i] = aux % 10;
t = aux / 10;
}
s[0] = i - 1;
if (t > 0)
{
s[++s[0]] = t;
}
}
void copie (int x[], int y[])
{
for (int i = 0; i <= x[0]; i++)
{
y[i] = x[i];
}
}
int main ()
{
#ifdef LOCAL
freopen("test.in", "r", stdin);
freopen("test.out", "w", stdout);
#else
freopen("indep.in", "r", stdin);
freopen("indep.out", "w", stdout);
#endif // LOCAL
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
unu[0] = 1;
unu[1] = 1;
int n;
cin >> n;
for (int i = 1; i <= n; i++)
{
int st = i % 2, x;
cin >> x;
for (int j = 1; j < max_size; j++)
{
copie(dp[1 - st][j], dp[st][j]);
}
for (int j = 1; j < max_size; j++)
{
int gcd = __gcd(x, j);
sum(dp[1 - st][j], dp[st][gcd], dp[st][gcd]);
}
sum(dp[st][x], unu, dp[st][x]);
}
int st = n % 2;
if (dp[st][1][0] == 0)
{
cout << 0;
}
for (int i = dp[st][1][0]; i > 0; i--)
{
cout << dp[st][1][i];
}
return 0;
}