Pagini recente » Cod sursa (job #153419) | Rating Antonia Onisoru (antonia.onisoru) | Cod sursa (job #1070098) | Cod sursa (job #1975976) | Cod sursa (job #493746)
Cod sursa(job #493746)
#include <cstdio>
#include <cstring>
const int N = 512;
const int R = 1024;
const int L = 1<<7;
int n;
short int a[2][R][L];
int cmmdc(int x,int y)
{
int r;
while(y != 0)
{
r = x%y;
x = y;
y = r;
}
return x;
}
void unu(short int x[L])
{
short int i,t=1,aux;
for(i=1 ; i<=x[0] || t!=0 ; ++i)
{
aux = x[i] + t;
t = (aux < 10 ? 0 : 1);
x[i] = aux % 10;
}
x[0] = i-1;
}
void plus(short int x[L],short int y[L])
{
short int i,t=0,aux;
for(i=1 ; i<=x[0] || i<=y[0] || t!=0 ; ++i)
{
aux = x[i] + y[i] + t;
t = (aux < 10 ? 0 : 1);
x[i] = aux % 10;
}
x[0] = i-1;
}
void scrie(short int x[L])
{
for(short int i=x[0] ; i>=1 ; --i)
printf("%hd",x[i]);
//printf("\n");
}
inline bool zero(short int x[L])
{
return (x[0] == 0);
}
void linie(short int i)
{
for(short int j=1 ; j<=6 ; ++j)
{
if(zero(a[i][j]))
printf("0");
else
scrie(a[i][j]);
printf("\t");
}
printf("\n");
}
int main()
{
freopen("indep.in","r",stdin);
freopen("indep.out","w",stdout);
int x,d;
scanf("%d",&n);
for(int i=1 ; i<=n ; ++i)
{
scanf("%d",&x);
unu(a[i&1][x]);
for(int j=1 ; j<R ; ++j)
{
if(zero(a[1 - (i&1)][j]))
continue;
d = cmmdc(j,x);
plus(a[i&1][d],a[1 - (i&1)][j]);
}
//linie(i&1);
for(int j=1 ; j<R ; ++j)
{
plus(a[i&1][j],a[1 - (i&1)][j]);
memset(a[1 - (i&1)][j],0,L*sizeof(short int));
}
//linie(i&1);
}
scrie(a[n&1][1]);
return 0;
}