Pagini recente » Cod sursa (job #1264804) | Cod sursa (job #2083288) | Cod sursa (job #677938) | Cod sursa (job #2295579) | Cod sursa (job #2201135)
#include<fstream>
#define Base 100000000
using namespace std;
ifstream fi("indep.in");
ofstream fo("indep.out");
typedef struct nr{int nrc,C[20];} 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]/Base;
a.C[i]%=Base;
}
while(T)
{
a.C[++a.nrc]=T%Base;
T/=Base;
}
}
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,val;
fo<<Dp[n%2][1].C[Dp[n%2][1].nrc];
for(i=Dp[n%2][1].nrc-1; i>=1; i--)
{
val=Base/10;
while(val>1 && val>Dp[n%2][1].C[i])
{
fo<<"0";
val/=10;
}
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;
}