Pagini recente » Cod sursa (job #1163590) | Cod sursa (job #83182) | Cod sursa (job #642820) | Cod sursa (job #3134670) | Cod sursa (job #843208)
Cod sursa(job #843208)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
using namespace std;
int n,a[510],p[1001][250],vmax;
void adauga(int p1,int p2)
{
p[p1][0]=max(p[p1][0],p[p2][0]);
for(int i=1;i<=p[p1][0];i++)
{
p[p1][i]+=p[p2][i];
if(p[p1][i]>=10)
{
p[p1][i+1]+=p[p1][i]/10;
p[p1][i]%=10;
p[p1][0]+= (i == p[p1][0]);
}
}
}
void db(int p1)
{
for(int i=1;i<=p[p1][0];i++)
p[p1][i]*=2;
for(int i=1;i<=p[p1][0];i++)
if(p[p1][i]>=10)
{
p[p1][i+1]+=p[p1][i]/10;
p[p1][i]%=10;
p[p1][0]+= (i == p[p1][0]);
}
}
inline int cmmdc(int a, int b)
{
if (b == 0) return a;
return cmmdc(b, a % b);
}
int main()
{
ifstream fin("indep.in");
ofstream fout("indep.out");
fin>>n;
for(int i=1;i<=n;i++)
{
fin>>a[i];
if(a[i]>vmax) vmax=a[i];
}
p[0][0]=p[0][1]=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=vmax;j++)
{
if(cmmdc(a[i],j) == j) db(j);
else adauga(cmmdc(a[i],j),j);
}
adauga(a[i],0);
}
if (p[1][0] == 0) p[1][0] = 1;
for (int i = p[1][0]; i >= 1; --i)
fout << p[1][i];
return 0;
}