Pagini recente » Cod sursa (job #1731717) | Cod sursa (job #846600) | Cod sursa (job #195839) | Rating Robert Chiributa (Chiri_) | Cod sursa (job #2764720)
#include <fstream>
#include <iostream>
using namespace std;
int baza = 1000;
typedef int bigNr[75];
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[a[1]][++llung[a[1]]] = 1;
for (i = 2; i <= n; i++) {
for (j = 1; j <= 1000; j++) {
clung[j] = llung[j];
for (k = clung[j]; k >= 1; k--)
cur[j][k] = last[j][k];
}
for (j = 1; 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 = 1; 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 >= 2; i--) {
g << cur[1][i];
if (cur[1][i] < 10)
g << "00";
else if (cur[1][i] < 100)
g << "0";
}
g << cur[1][1];
g.close();
}
int main() {
read();
solve();
output();
return 0;
}