Pagini recente » Cod sursa (job #1840603) | Cod sursa (job #781032) | Cod sursa (job #392449) | Cod sursa (job #1481643) | Cod sursa (job #2315699)
#include <bits/stdc++.h>
using namespace std;
ifstream in("indep.in");
ofstream out("indep.out");
typedef long long ll;
ll dp[2][1001][101],v[501],one[5],Max;
const ll base = 1e9;
void add(ll A[], ll B[])
{
ll 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;
}
ll nrcif(ll x)
{
ll c = 1;
while (x>9)
{
x/=10;
c++;
}
return c;
}
int main()
{
ll n;
in >> n;
for (ll i = 1; i<=n; i++)
{
in >> v[i];
Max = max(Max,v[i]);
}
ll l = 0;
one[++one[0]] = 1;
add(dp[1][v[1]],one);
for (ll i = 2; i<=n; i++, l = 1-l)
{
memset(dp[l],0,sizeof(dp[l]));
for (ll 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;
ll sz = dp[l][1][0];
out << dp[l][1][sz];
for (ll i = sz-1; i>=1; i--)
{
ll x = dp[l][1][i], cnt = nrcif(x);
for (ll j = 1; j<=9-cnt; j++)
out << "0";
out << x;
}
}