Pagini recente » Cod sursa (job #2460278) | Cod sursa (job #2939567) | Cod sursa (job #1236214) | Cod sursa (job #1459132) | Cod sursa (job #2608916)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("indep.in");
ofstream fout("indep.out");
const int vMax=1005;
const int base=10;
int n,nr;
struct bigN
{
int v[vMax*5];
}dp[vMax];
void ad(int v1[],int v2[])
{
int c=0,nr;
for(int i=1;i<=max(v1[0],v2[0]);i++)
{
nr=c+v1[i]+v2[i];//adunam vectorii
c=nr/10;
v1[i]=nr%10;
}
v1[0]=max(v1[0],v2[0]);//inca o varianta 1
while(c)
{
v1[++v1[0]]=c%10;
c/=10;
}
}
int main()
{
fin>>n;
dp[0].v[0]=1;
dp[0].v[1]=1;
for(int i=1;i<=n;i++)
{
fin>>nr;
for(int j=1;j<=vMax;j++)
if(dp[j].v[0])
{
int gcd=__gcd(nr,j);
ad(dp[gcd].v,dp[j].v);
}
ad(dp[nr].v,dp[0].v);//inca o varianta 2
}
if(dp[1].v[0])
{
for(int i=dp[1].v[0];i>0;i--)
fout<<dp[1].v[i];
}
else
fout<<"0";
return 0;
}