Pagini recente » Cod sursa (job #2497912) | Cod sursa (job #1204954) | Cod sursa (job #1370875) | Cod sursa (job #3236927) | Cod sursa (job #299622)
Cod sursa(job #299622)
#include <algorithm>
#define DIM 505
using namespace std;
int a[DIM],b[2][DIM][DIM];
int n,nmax;
void read ()
{
int i;
scanf ("%d",&n);
for (i=1; i<=n; ++i)
{
scanf ("%d",&a[i]);
if (a[i]>nmax)
nmax=a[i];
}
}
int cmmdc (int a,int b)
{
int r;
do
{
r=a%b;
a=b;
b=r;
}
while (r);
return a;
}
void add (int a[DIM],int b[DIM])
{
int i,t=0;
for (i=1; i<=a[0] || i<=b[0] || t; ++i, t/=10)
a[i]=(t+=a[i]+b[i])%10;
a[0]=i-1;
}
void solve ()
{
int i,j,i1=0,i2=1,nr;
for (i=1; i<=n; ++i)
{
b[i2][a[i]][0]=b[i2][a[i]][1]=1;
for (j=1; j<=nmax; ++j)
if (b[i1][j][0])
{
nr=cmmdc (a[i],j);
add (b[i2][nr],b[i1][j]);
add (b[i2][j],b[i1][j]);
}
i1^=i2^=i1^=i2;
memset (b[i2],0,sizeof (b[i2]));
}
if (!b[i1][1][0])
printf ("0");
else
{
printf ("%d",b[i1][1][b[i1][1][0]]);
for (i=b[i1][1][0]-1; i; --i)
printf ("%.6d",b[i1][1][i]);
}
}
int main ()
{
freopen ("indep.in","r",stdin);
freopen ("indep.out","w",stdout);
read ();
solve ();
return 0;
}