Pagini recente » Cod sursa (job #941862) | Cod sursa (job #2829647) | Cod sursa (job #312459) | Cod sursa (job #1952184) | Cod sursa (job #2279099)
#include <cstdio>
#define N 505
#define M 3005
#define mod 1000000000
using namespace std;
int n;
long long sol[M][M], a[N];
void citire()
{
scanf("%d\n", &n);
for(int i=1;i<=n;i++)
scanf("%lld\n", &a[i]);
}
int cmmdc(int a, int b)
{
if(b==0)
return a;
return cmmdc(b, a%b);
}
void adun(long long rez[], long long a[])
{
long long t=0;
if(a[0]>rez[0])
{
for(int i=rez[0]+1;i<=a[0];i++)
rez[i]=0;
rez[0]=a[0];
}
else
for(int i=a[0]+1;i<=rez[0];i++)
a[i]=0;
for(int i=1;i<=rez[0];i++)
{
int c=rez[i]+a[i]+t;
rez[i]=c%mod;
t=c/mod;
}
if(t)
rez[++rez[0]]=t;
}
void initializare()
{
for(int i=1;i<=1000;i++)
{
sol[i][0]=1;
sol[i][1]=0;
}
}
void calcul()
{
long long unu[2]={1, 1};
initializare();
sol[a[1]][1]=1;
for(int i=2;i<=n;i++)
{
for(int j=1;j<=1000;j++)
{
int c=cmmdc(j, a[i]);
adun(sol[c], sol[j]);
}
adun(sol[a[i]], unu);
}
}
void afisare()
{
printf("%lld", sol[1][sol[1][0]]);
for(int i=sol[1][0]-1;i>=1;i--)
printf("%.9lld", sol[1][i]);
}
int main()
{
freopen("indep.in", "r", stdin);
freopen("indep.out", "w", stdout);
citire();
calcul();
afisare();
return 0;
}