Pagini recente » Cod sursa (job #2295508) | Cod sursa (job #19425) | Cod sursa (job #2667753) | Cod sursa (job #746959) | Cod sursa (job #852967)
Cod sursa(job #852967)
#include <iostream>
#include <fstream>
#include <algorithm>
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]<<=1;
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()
{
freopen ("indep.in","r",stdin);
freopen ("indep.out","w",stdout);
scanf("%d", &n);
for(int i=1;i<=n;++i)
{
scanf("%d", &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)
printf("%d", p[1][i]);
return 0;
}