Pagini recente » Cod sursa (job #215019) | Cod sursa (job #2751727) | Cod sursa (job #2801796) | Cod sursa (job #2482183) | Cod sursa (job #843200)
Cod sursa(job #843200)
#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;
if(p[p1][i]>=10)
{
p[p1][i+1]+=p[p1][i]/10;
p[p1][i]%=10;
p[p1][0]+= (i == p[p1][0]);
}
}
}
int cmmdc(int a, int b)
{
while(b)
{
int aux=b;
b=a%b;
a=aux;
}
if(a==1) return 1;
return 0;
}
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;
}