Pagini recente » Cod sursa (job #773037) | Cod sursa (job #908743) | Cod sursa (job #2048867) | Cod sursa (job #457930) | Cod sursa (job #2201134)
#include<fstream>
using namespace std;
ifstream fi("indep.in");
ofstream fo("indep.out");
typedef struct nr{int nrc,C[160];} NR;
NR Dp[2][1005];
int n,i,cr,A[505],j;
void adu(NR &a, NR &b)
{
int i,T=0;
if(b.nrc>a.nrc)
a.nrc=b.nrc;
for(i=1; i<=a.nrc; i++)
{
a.C[i]=a.C[i]+b.C[i]+T;
T=a.C[i]/10;
a.C[i]%=10;
}
while(T)
{
a.C[++a.nrc]=T%10;
T/=10;
}
}
int cmmdc(int a, int b)
{
int r=a%b;
while(r)
{
a=b;
b=r;
r=a%b;
}
return b;
}
void afis()
{
int i;
for(i=Dp[n%2][1].nrc; i>=1; i--)
fo<<Dp[n%2][1].C[i];
}
int main()
{
fi>>n;
for(i=1; i<=n; i++)
fi>>A[i];
Dp[0][0].nrc=Dp[0][0].C[1]=1;
for(i=1; i<=n; i++)
{
cr=i%2;
for(j=0; j<=1000; j++)
Dp[cr][j]=Dp[1-cr][j];
for(j=0; j<=1000; j++)
adu(Dp[cr][cmmdc(j,A[i])],Dp[1-cr][j]);
}
afis();
fi.close();
fo.close();
return 0;
}