Pagini recente » Cod sursa (job #657318) | Cod sursa (job #827906)
Cod sursa(job #827906)
#include <cstdio>
using namespace std;
const int MAXN = 510;
const int MAXE = 10010;
const int MAXC = 50;
const int BASE = 1000000000;
int A[MAXN];
int D[MAXE][MAXC];
int Unu[MAXC];
inline int cmmdc (int A, int B)
{
if (B > A)
return cmmdc (B, A);
if (!B)
return A;
int r = A % B;
while (r){
A = B;
B = r;
r = A % B;
}
return B;
}
void AddHuge (int *A, int *B)
{
int i, t = 0;
for (i = 1; i <= A[0] || i <= B[0] || t; i ++, t /= BASE)
A[i] = (t += A[i] + B[i]) % BASE;
A[0] = i - 1;
}
void Afis (int *A)
{
printf ("%d", A[ A[0] ]);
for (int i = A[0] - 1; i > 0; i --)
printf ("%09d", A[i]);
}
int main ()
{
freopen ("indep.in", "r", stdin);
freopen ("indep.out", "w", stdout);
int N, i, j, Max = -1;
Unu[0] = Unu[1] = 1;
scanf ("%d\n", &N);
for (i = 1; i <= N; i ++){
scanf ("%d\n", A + i);
if (A[i] > Max)
Max = A[i];
}
for (i = 1; i <= N; i ++){
for (j = 1; j <= Max; j ++)
AddHuge (D[ cmmdc (j, A[i]) ], D[j]);
AddHuge (D[ A[i] ], Unu);
}
Afis (D[1]);
return 0;
}