Pagini recente » Cod sursa (job #2054917) | Cod sursa (job #2536720) | Cod sursa (job #2066892) | Cod sursa (job #1527370) | Cod sursa (job #834242)
Cod sursa(job #834242)
#include <stdio.h>
#define BASE 1000000000
int dp[1024][150];
int x[512], unu[] = {1, 1};
void baga(int A[], int B[])
{
if (B[0] > A[0])
A[0] = B[0];
int i, tr = 0;
for (i = 1; i <= A[0]; i ++)
{
tr = tr + A[i] + B[i];
A[i] = tr % BASE;
tr = tr / BASE;
}
if (tr)
A[++ A[0]] = tr;
}
inline int gcd(int a, int b)
{
int r;
while (b)
{
r = a % b;
a = b;
b = r;
}
return a;
}
int main()
{
int N, i, j, vmax = -1;
freopen("indep.in", "r", stdin);
freopen("indep.out", "w", stdout);
scanf("%d", &N);
for (i = 1; i <= N; i ++)
{
scanf("%d", &x[i]);
if (x[i] > vmax)
vmax = x[i];
}
for (i = 1; i <= N; i ++)
{
for (j = 1; j <= vmax; j ++)
baga(dp[gcd(x[i], j)], dp[j]);
baga(dp[x[i]], unu);
}
printf("%d", dp[1][dp[1][0]]);
for (i = dp[1][0] - 1; i >= 1; i --)
printf("%09d", dp[1][i]);
return 0;
}