Pagini recente » Cod sursa (job #1894028) | Cod sursa (job #2843611) | Cod sursa (job #382179) | Cod sursa (job #2865150) | Cod sursa (job #2102325)
#include <cstdio>
#include <cstring>
#include <iostream>
#define BAZA 1000000000
#define MAXN 1001
typedef int HUGE[150];
HUGE d[2][MAXN],one={1,1};
inline int cmmdc(int a,int b)
{
int r;
while(b)
{
r=a%b;
a=b;b=r;
}
return a;
}
inline void add(HUGE a,HUGE b)
{
int t=0;
a[0]=std::max(a[0],b[0]);
for(int i=1;i<=a[0];i++)
{
a[i]+=b[i]+t;
t=a[i]/BAZA;a[i]%=BAZA;
}
if(t)
a[++a[0]]=t;
}
int main()
{
FILE *fin,*fout;
fin=fopen("indep.in","r");
fout=fopen("indep.out","w");
int n,x,r=1;
fscanf(fin,"%d%d",&n,&x);
d[0][x][0]=d[0][x][1]=1;
for(int i=1;i<n;i++)
{
fscanf(fin,"%d",&x);
for(int j=1;j<MAXN;j++)
{
memset(d[r][j],0,sizeof(d[r][j]));
add(d[r][j],d[1-r][j]);
add(d[r][cmmdc(j,x)],d[1-r][j]);
}
add(d[r][x],one);
r=1-r;
}
r=1-r;
fprintf(fout,"%d",d[r][1][d[r][1][0]]);
for(int i=d[r][1][0]-1;i>0;i--)
fprintf(fout,"%.9d",d[r][1][i]);
fclose(fin);
fclose(fout);
return 0;
}