Pagini recente » Cod sursa (job #2794837) | Monitorul de evaluare | Istoria paginii runda/fminostressrecap | Cod sursa (job #1290255) | Cod sursa (job #325537)
Cod sursa(job #325537)
#include <cstdio>
#include <algorithm>
using namespace std;
#define file_in "indep.in"
#define file_out "indep.out"
#define Baza 1000000000
int v[1010];
int n,Cnt[2][1010][1010],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 m=max(Cnt[ind][j][0],Cnt[ind^1][l][0]);
for (i=1;i<=m;++i)
Cnt[ind^1][l][i]+=Cnt[ind][j][i];
for (i=1;i<=m;++i)
{
Cnt[ind^1][l][i+1]+=(Cnt[ind^1][l][i]/Baza);
Cnt[ind^1][l][i+1]%=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^1][v[1]][0]=1;
for (i=1;i<n;++i)
{
//memset(Cnt,0,sizeof(Cnt));
for (j=1;j<=1000;++j)
{
memset(Cnt[ind^1][j],0,1000*(sizeof(Cnt[ind^1][j])));
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;
}