Pagini recente » Cod sursa (job #442274) | Cod sursa (job #1013529) | Cod sursa (job #1979676) | Cod sursa (job #784578) | Cod sursa (job #1240158)
#include <fstream>
#include<vector>
using namespace std;
ifstream in("indep.in");
ofstream out("indep.out");
const int nmax = 506, vmax = 1006, base = 100000000;
vector <int> d[nmax][vmax];
int n, v[nmax], maxim;
/*int cmmdc(int a, int b)
{
if(!b)
return a;
else
return cmmdc(b, a%b);
}*/
int cmmdc(int a, int b) {
int chestie;
while(b!=0)
{
chestie = a % b;
a = b;
b = chestie;
}
return a;
}
void adunare(vector <int> &x, vector <int> y)
{
int minte = 0;
for(int i = 0; i<(int)x.size() || i < (int)y.size() || minte != 0; i++)
{
if (i==(int)x.size())
{
x.push_back(0);
}
if (i<(int)y.size())
{
x[i] += y[i];
}
x[i] += minte;
minte = x[i] / base;
x[i] %= base;
}
}
void norm(int a)
{
if(a>base / 10)
{
return;
}
out<<0;
norm(a * 10);
}
int main()
{
int player_unu=0;
in>>n;
for(int i = 1; i<=n; i++)
{
in>>v[i];
if(v[i]>maxim)
maxim = v[i];
}
d[0][0].push_back(1);
for(int i = 1; i<=n; i++)
{
for(int j = 0; j<=maxim; j++)
{
d[i][j] = d[i - 1][j];
}
for(int j = 0; j<=maxim; j++)
{
adunare(d[i][cmmdc(j, v[i])], d[i - 1][j]);
}
}
if(d[n][1].size()==0)
{
out<<0<<'\n';
return 0;
}
out<<d[n][1][(int)d[n][1].size() - 1];
for(int i = (int)d[n][1].size() - 2; i>=0; i--)
{
norm(d[n][1][i]);
out<<d[n][1][i];
}
out<<'\n';
return player_unu;
}