Pagini recente » Cod sursa (job #3327152) | Cod sursa (job #3350492) | Cod sursa (job #3320404) | Borderou de evaluare (job #2783874) | Cod sursa (job #3340150)
#include <fstream>
using namespace std;
const int VMIN = 1;
const int VMAX = 1000;
const int N = 500;
const int NC = 200;
short int nrs[2][VMAX+1][NC], unu[NC];
int cmmdc(int a, int b)
{
while (b != 0)
{
int r = a % b;
a = b;
b = r;
}
return a;
}
void copie(short int dest[], short int src[])
{
for (int i = 0; i <= src[0]; i++)
{
dest[i] = src[i];
}
}
void suma(short int a[], short int b[])
{
int i = 1, nc = max(a[0], b[0]), t = 0;
while (i <= nc)
{
int s = a[i] + b[i] + t;
a[i] = s % 10;
t = s / 10;
i++;
}
if (t > 0)
{
a[i++] = t;
}
a[0] = i - 1;
}
int main()
{
ifstream in("indep.in");
ofstream out("indep.out");
int n;
in >> n;
unu[0] = unu[1] = 1;
for (int i = 1; i <= n; i++)
{
int x_i;
in >> x_i;
int lin_c = i % 2;
int lin_a = 1 - lin_c;
for (int val = VMIN; val <= VMAX; val++)
{
//nrs[lin_c][val] = nrs[lin_a][val];
copie(nrs[lin_c][val], nrs[lin_a][val]);
}
for (int val = VMIN; val <= VMAX; val++)
{
int d = cmmdc(x_i, val);
//nrs[lin_c][d] += nrs[lin_a][val];
suma(nrs[lin_c][d], nrs[lin_a][val]);
}
//nrs[lin_c][x_i]++;
suma(nrs[lin_c][x_i], unu);
}
//out << nrs[n%2][1] << "\n";
int n_2 = n % 2;
for (int i = nrs[n_2][1][0]; i >= 1; i--)
{
out << nrs[n_2][1][i];
}
out << "\n";
in.close();
out.close();
return 0;
}