Pagini recente » Cod sursa (job #1208983) | Cod sursa (job #628012)
Cod sursa(job #628012)
#include<stdio.h>
#include<string.h>
using namespace std;
long n,x[501];
short a[501][1001][250],u[300];
//alta sursa de 100...
void suma(short int a[],short int b[])
{
int i,t=0;
for (i=1; i<=a[0] || i<=b[0] || t; i++,t/=10)
a[i]=(t+=a[i]+b[i])%10;
a[0]=i-1;
}
int cmmdc(int a,int b)
{
int r;
while (b!=0)
{
r=a%b;
a=b;
b=r;
}
return a;
}
int main()
{
int i,j;
freopen("indep.in","r",stdin);
freopen("indep.out","w",stdout);
scanf("%d",&n);
for(i=1; i<=n; ++i)
{
scanf("%d",&x[i]);
}
u[0]=u[1]=1;
a[1][x[1]][0]=a[1][x[1]][1]=1;
for(i=2; i<=n; ++i)
{
memset(a[i&1],0,sizeof(a[i&1]));
for(j=1; j<1001; j++)
suma(a[i&1][cmmdc(j,x[i])],a[(i-1)&1][j]);
suma(a[i&1][x[i]],u);
for(j=1; j<1001; j++)
suma(a[i&1][j],a[(i-1)&1][j]);
}
if(a[n&1][1][0]==0)
{
printf("0");
return 0;
}
for(i=a[n&1][1][0]; i>0; --i)
printf("%d",a[n&1][1][i]);
return 0;
}