Pagini recente » Cod sursa (job #2953221) | Cod sursa (job #1485928) | Cod sursa (job #2902373) | Cod sursa (job #1097593) | Cod sursa (job #2315706)
#include <bits/stdc++.h>
using namespace std;
ifstream in("indep.in");
ofstream out("indep.out");
int dp[2][1001][101],v[501],one[5],Max;
const int base = 1e9;
void add(int A[], int B[])
{
A[0] = max(A[0], B[0]);
int t = 0;
for(int i = 1; i <= A[0] ; ++i)
{
A[i] = A[i] + B[i] + t;
t = A[i]/base;
A[i] %= base;
}
if(t > 0) A[++A[0]] = t;
}
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];
Max = max(Max,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<=Max; 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;
}
}