Pagini recente » Cod sursa (job #2174847) | Cod sursa (job #2586852) | Cod sursa (job #2421547) | Cod sursa (job #1675866) | Cod sursa (job #124128)
Cod sursa(job #124128)
#include<stdio.h>
#include<string.h>
#define baza 1000000000
#define max 62
long nr[1024];
short cmmd[1024][1024];
long t[1024][64];
long v[1024][64];
long cmmdc(long a,long b)
{
while(b)
{
long c = a % b;
a = b;
b = c;
}
return a;
}
void add(long *a, long *b)
{
long i;
if(a[0] == 0)
a[0] = b[0] ;
if( b[0] == 0) return ;
for( i = max; i >= a[0] || a[i+1] > baza; i--)
{
a[i]+=b[i] + a[i+1]/baza;
a[i+1]%=baza;
}
a[0] = i+1;
}
void afisare(long *a)
{
printf("%ld",a[a[0]]);
for(long i = a[0]+1; i <= max;i++)
printf("%09ld",a[i]);
}
int main()
{
freopen("indep.in","r",stdin);
freopen("indep.out","w",stdout);
long i,j,n;
scanf("%ld",&n);
for( i = 1; i <= n; ++i)
{
scanf("%ld",&nr[i]);
}
for( i = 1; i <= 1000 ; i++)
for( j = i ; j <= 1000 ; ++j)
cmmd[i][j] = cmmd[j][i] = cmmdc(j,i);
for( i = 1; i <= n; i++)
{
memset(t,0,sizeof(t));
t[ nr[i] ][max] = 1;
t[ nr[i] ][0] = max;
for( j = 1; j <= 1000; ++j)
{
if(v[j][0] == 0) continue;
add( t[cmmd[nr[i]][j]],v[j]);
}
for( j = 1; j <= 1000; ++j)
add(v[j],t[j]);
}
afisare(v[1]);
return 0;
}