Pagini recente » Cod sursa (job #1200302) | Cod sursa (job #979887) | Cod sursa (job #2356419) | Cod sursa (job #2517211) | Cod sursa (job #464200)
Cod sursa(job #464200)
#include <cstdio>
#include <cstring>
#define file_in "indep.in"
#define file_out "indep.out"
#define Baza 1000000
int n,v[530],cnt[2][1<<10][1<<5],q[1<<5];
void citire()
{
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
scanf("%d", &n);
for (int i=1;i<=n;++i)
scanf("%d", &v[i]);
}
int cmmdc(int a, int b)
{
int r;
while(b)
{
r=a%b;
a=b;
b=r;
}
return a;
}
void add(int a[], int b[])
{
int i,t=0;
for (i=1;i<=a[0] || i<=b[0] ||t;++i,t/=Baza)
a[i]=(t+=a[i]+b[i])%Baza;
a[0]=i-1;
}
void scrie(int a[])
{
int i;
printf("%d", a[a[0]]);
for (i=a[0]-1;i>=1;--i)
printf("%.6d", a[i]);
}
void solve()
{
int i,j;
q[0]=q[1]=1;
//memset(cnt,0,sizeof(cnt));
int ind=0;
for (i=1;i<=n+1;++i,ind^=1)
{
memcpy(cnt[ind^1],cnt[ind],sizeof(cnt[ind]));
for (j=1;j<=1000;++j)
add(cnt[ind^1][cmmdc(j,v[i])],cnt[ind][j]);
add(cnt[ind^1][v[i]],q);
//ind^=1;
}
//printf("%d", cnt[ind][1]);
scrie(cnt[ind^1][1]);
}
int main()
{
citire();
solve();
fclose(stdin);
fclose(stdout);
return 0;
}