Mai intai trebuie sa te autentifici.
Cod sursa(job #114429)
Utilizator | Data | 14 decembrie 2007 09:24:57 | |
---|---|---|---|
Problema | Indep | Scor | 35 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.91 kb |
#include <stdio.h>
#include <string.h>
#define nm 512
#define mm 1024
#define lm 1024
#define baza 10
int cmmdc(int a, int b)
{
if (a == 0)
return b;
return cmmdc(b % a, a);
}
void sum(int a[lm], int b[lm])
{
int i, t = 0;
for (i = 1; i <= a[0] || i <= b[0] || t; ++i, t /= baza)
a[i] = (t += a[i] + b[i]) % baza;
a[0] = i - 1;
}
int n, a[nm], last[mm][lm], crt[mm][lm], nr1[lm];
int main()
{
freopen("indep.in", "r", stdin);
freopen("indep.out", "w", stdout);
scanf("%d", &n);
for (int i = 1; i <= n; ++i)
scanf("%d", &a[i]);
crt[a[1]][0] = crt[a[1]][1] = last[a[1]][0] = last[a[1]][1] = 1;
nr1[0] = nr1[1] = 1;
for (int i = 2; i <= n; ++i) {
sum(crt[a[i]], nr1);
for (int j = 1; j <= 1000; ++j) {
int aux = cmmdc(j, a[i]);
sum(crt[aux], last[j]);
}
memcpy(last, crt, sizeof(crt));
}
for (int i = crt[1][0]; i > 0; --i)
printf("%d", crt[1][i]);
printf("\n");
return 0;
}