Pagini recente » Cod sursa (job #2326404) | Cod sursa (job #2177655) | Cod sursa (job #755782) | Cod sursa (job #2784311) | Cod sursa (job #2315723)
#include <bits/stdc++.h>
using namespace std;
ifstream in("indep.in");
ofstream out("indep.out");
int dp[2][1005][105],v[505],one[5];
const int base = 1e9;
void add(int A[], int B[])
{
int i, t = 0;
for (i = 1; i<=A[0] || i<=B[0] || t; i++, t/=base)
{
t+=A[i]+B[i];
A[i] = t%base;
}
A[0] = i-1;
}
int nrcif(int x)
{
int c = 1;
while (x>9)
{
x/=10;
c++;
}
return c;
}
int main()
{
int n;
in >> n;
for (int i = 1; i<=n; i++)
in >> v[i];
int l = 0;
one[++one[0]] = 1;
add(dp[1][v[1]],one);
for (int i = 2; i<=n; i++, l = 1-l)
{
memset(dp[l],0,sizeof(dp[l]));
for (int j = 1; j<=1000; j++)
{
add(dp[l][__gcd(v[i],j)],dp[1-l][j]);
add(dp[l][j],dp[1-l][j]);
}
add(dp[l][v[i]],one);
}
l = 1-l;
int sz = dp[l][1][0];
out << dp[l][1][sz];
for (int i = sz-1; i>=1; i--)
{
int x = dp[l][1][i], cnt = nrcif(x);
for (int j = 1; j<=9-cnt; j++)
out << "0";
out << x;
}
}