Pagini recente » Cod sursa (job #93157) | Cod sursa (job #1257287) | Cod sursa (job #2731418) | Cod sursa (job #3130506) | Cod sursa (job #2764758)
#include <fstream>
#include <iostream>
using namespace std;
int baza = 100000000;
typedef int bigNr[50];
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 dp[2][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;
dp[0][0][++dp[0][0][0]] = 1;
for (i = 1; i <= n; i++) {
for (j = 0; j <= 1000; j++) {
dp[i % 2][j][0] = dp[1 - i % 2][j][0];
for (k = dp[i % 2][j][0]; k >= 1; k--)
dp[i % 2][j][k] = dp[1 - i % 2][j][k];
}
for (j = 0; j <= 1000; j++) {
cmmdc = euclid(j, a[i]);
dp[i % 2][cmmdc][0] = max(dp[i % 2][cmmdc][0], dp[1 - i % 2][j][0]);
t = 0;
for (k = 1; k <= dp[i % 2][cmmdc][0]; k++) {
t += dp[i % 2][cmmdc][k] + dp[1 - i % 2][j][k];
dp[i % 2][cmmdc][k] = t % baza;
t /= baza;
}
while (t) {
dp[i % 2][cmmdc][++dp[i % 2][cmmdc][0]] = t % baza;
t /= baza;
}
}
}
}
void output() {
int i, x;
ofstream g("indep.out");
g << dp[n % 2][1][dp[n % 2][1][0]];
for (i = dp[n % 2][1][0] - 1; i >= 1; i--) {
x = dp[n % 2][1][i];
if (x < 10)
g << "0000000";
else if (x < 100)
g << "000000";
else if (x < 1000)
g << "00000";
else if (x < 10000)
g << "0000";
else if (x < 100000)
g << "000";
else if (x < 1000000)
g << "00";
else if (x < 10000000)
g << "0";
g << x;
}
g.close();
}
int main() {
read();
solve();
output();
return 0;
}