Pagini recente » Cod sursa (job #763796) | Cod sursa (job #2604576) | Cod sursa (job #2517319) | Cod sursa (job #2741997) | Cod sursa (job #343824)
Cod sursa(job #343824)
#include <cstdio>
#include <algorithm>
using namespace std;
#define file_in "indep.in"
#define file_out "indep.out"
#define Baza 1000000000
int v[510];
int n,Cnt[2][1010][50],ind,i,j;
int cmmdc(int a,int b)
{
int r;
while(b)
{
r=a%b;
a=b;
b=r;
}
return a;
}
void adunare(int l)
{
//int i;
int k;
int m=max(Cnt[ind][j][0],Cnt[ind^1][l][0]);
for (k=1;k<=m;++k)
Cnt[ind^1][l][k]+=Cnt[ind][j][k];
for (k=1;k<=m;++k)
{
Cnt[ind^1][l][k+1]+=(Cnt[ind^1][l][k]/Baza);
Cnt[ind^1][l][k]%=Baza;
}
Cnt[ind^1][l][0]=m;
if (Cnt[ind^1][l][m+1])
Cnt[ind^1][l][0]++;
}
void afisare()
{
//int i;
printf("%d", Cnt[ind][1][Cnt[ind][1][0]]);
for (i=Cnt[ind][1][0]-1;i>=1;--i)
printf("%09d", Cnt[ind][1][i]);
}
int main()
{
//int i,j;
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
scanf("%d", &n);
for (i=1;i<=n;++i)
scanf("%d", &v[i]);
/*Cnt[1][v[1]]=1;
for (i=1;i<n;++i)
{
Cnt[i+1][v[i+1]]++;
for (j=1;j<=1000;++j)
{
Cnt[i+1][j]+=Cnt[i][j];
Cnt[i+1][cmmdc(j,v[i+1])]+=Cnt[i][j];
}
}*/
ind=0;
Cnt[ind][v[1]][0]=1;
Cnt[ind][v[1]][1]=1;
//ind=1;
for (i=1;i<n;++i)
{
//memset(Cnt,0,sizeof(Cnt));
for (j=1;j<=1000;++j)
{
memset(Cnt[ind^1][j],0,50*sizeof(int));
Cnt[ind^1][j][0]=1;
}
Cnt[ind^1][v[i+1]][1]=1;
for (j=1;j<=1000;++j)
{
adunare(j);
adunare(cmmdc(j,v[i+1]));
}
ind^=1;
}
//printf("%lld", Cnt[n][1]);
afisare();
fclose(stdin);
fclose(stdout);
return 0;
}