Pagini recente » Cod sursa (job #2071070) | Cod sursa (job #1252043) | Cod sursa (job #2882280) | Cod sursa (job #2741937) | Cod sursa (job #2062874)
#include <iostream>
#include <cstdio>
#define N 505
#define mod 100000000
using namespace std;
int n, a[N], sol[N*2][N];
void citire()
{
scanf("%d\n", &n);
for(int i=1;i<=n;i++)
scanf("%d\n", &a[i]);
}
int cmmdc(int a, int b)
{
if(b==0)
return a;
return cmmdc(b, a%b);
}
void adun(int rez[], int a[])
{
int 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()
{
int 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("%d", sol[1][sol[1][0]]);
for(int i=sol[1][0]-1;i>=1;i--)
printf("%.8d", sol[1][i]);
}
int main()
{
freopen("indep.in", "r", stdin);
freopen("indep.out", "w", stdout);
citire();
calcul();
afisare();
return 0;
}