Pagini recente » Cod sursa (job #629512) | Cod sursa (job #1863363) | Cod sursa (job #787739) | Cod sursa (job #2235516) | Cod sursa (job #2764748)
#include <fstream>
#include <iostream>
using namespace std;
int baza = 10;
typedef int bigNr[201];
int a[501], n;
void read() {
int i;
ifstream f("indep.in");
f >> n;
for (i = 1; i <= n; i++)
f >> a[i];
f.close();
}
bigNr last[1001], cur[1001];
int llung[1001], clung[1001];
int euclid(int a, int b) {
if (b == 0)
return a;
else return euclid(b, a % b);
}
void solve() {
int i, j, k, cmmdc, t;
last[0][++llung[0]] = 1;
for (i = 1; i <= n; i++) {
for (j = 0; j <= 1000; j++) {
clung[j] = llung[j];
for (k = clung[j]; k >= 1; k--)
cur[j][k] = last[j][k];
}
for (j = 0; j <= 1000; j++) {
cmmdc = euclid(j, a[i]);
clung[cmmdc] = max(clung[cmmdc], llung[j]);
t = 0;
for (k = 1; k <= clung[cmmdc]; k++) {
t += cur[cmmdc][k] + last[j][k];
cur[cmmdc][k] = t % baza;
t /= baza;
}
while (t) {
cur[cmmdc][++clung[cmmdc]] = t;
t /= baza;
}
}
for (j = 0; j <= 1000; j++) {
llung[j] = clung[j];
for (k = llung[j]; k >= 1; k--)
last[j][k] = cur[j][k];
}
}
}
void output() {
int i;
ofstream g("indep.out");
for (i = clung[1]; i >= 1; i--)
g << cur[1][i];
g.close();
}
int main() {
read();
solve();
output();
return 0;
}