Pagini recente » Cod sursa (job #1949593) | Cod sursa (job #619778) | Cod sursa (job #2030801) | Cod sursa (job #1250939) | Cod sursa (job #775849)
Cod sursa(job #775849)
#include <cstdio>
using namespace std;
const short C=101;
const int M=1000000000;
int n, v[501], d[2][1001][C];
int cmmdc(int a, int b)
{
int r;
while(b!=0)
{
r = a % b;
a = b;
b = r;
}
return a;
}
void suma (int x[C], int y[C])
{
int i, aux, t=0;
for(i=1 ; i<=x[0] || i<=y[0] || t!=0 ; i++)
{
aux = t + x[i] + y[i];
x[i] = aux % M;
t = aux / M;
}
x[0] = i - 1;
}
void afisare (int x[C])
{
int i;
printf("%d", x[x[0]]);
for(i=x[0]-1 ; i>0 ; i--)
printf("%09d", x[i]);
}
/*
void reinit (bool a)
{
int i, j;
for(i=1 ; i<=1000 ; i++)
for(j=0 ; j<C ; j++)
d[a][i][j] = 0;
}
*/
void copy (int a)
{
int i, j;
for(i=0 ; i<=1000 ; i++)
for(j=0 ; j<C ; j++)
d[a][i][j]=d[1-a][i][j];
}
int main()
{
int i, j, c, i1, i2;
freopen("indep.in", "r", stdin);
freopen("indep.out", "w", stdout);
scanf("%d", &n);
for(i=1;i<=n;i++)
scanf("%d", &v[i]);
d[0][0][0] = d[0][0][1] = 1;
for(i=1 ; i<=n ; i++)
{
i1 = i % 2;
i2 = 1 - i1;
copy(i1);
for(j=0 ; j<=1000 ; j++)
{
c = cmmdc(v[i], j);
suma(d[i1][c], d[i2][j]);
}
}
afisare(d[n%2][1]);
return 0;
}