Pagini recente » Cod sursa (job #1684163) | Cod sursa (job #1823624) | Cod sursa (job #3253724) | Cod sursa (job #2785005) | Cod sursa (job #1189390)
#include <cstdio>
#define Nmax 505
#define Vmax 1005
#define Base 100000000
using namespace std;
int N,v[Nmax];
struct nr
{
int v[200];
};
nr dp[2][Vmax+10];
inline int CMMDC(int a, int b)
{
int r=a%b;
while(r)
{
a=b; b=r; r=a%b;
}
return b;
}
inline void Adun(int a[], int b[])
{
int k,i,x=0,rest=0;
if(a[0]<b[0])
{
k=b[0];
for(i=a[0]+1;i<=b[0];++i)
a[i]=0;
}
else
{
k=a[0];
for(i=b[0]+1;i<=a[0];++i)
b[i]=0;
}
for(i=1;i<=k;++i)
{
x=a[i]+b[i]+rest;
if(x>=Base)
{
rest=1;
a[i]=x-Base;
}
else
{
rest=0;
a[i]=x;
}
}
a[0]=k;
if(rest)
a[++a[0]]=rest;
}
int main()
{
int i,j,l1,l2,unu[200];
unu[0]=unu[1]=1;
freopen ("indep.in","r",stdin);
freopen ("indep.out","w",stdout);
scanf("%d", &N);
for(i=1;i<=N;++i)
scanf("%d", &v[i]);
for(i=1;i<N;++i)
{
l1=(i&1); l2=((i+1)&1);
Adun(dp[l1][v[i]].v,unu);
for(j=1;j<=Vmax;++j)
{
dp[l2][j].v[0]=1;
dp[l2][j].v[1]=0;
}
for(j=1;j<=Vmax;++j)
{
Adun(dp[l2][j].v,dp[l1][j].v);
Adun(dp[l2][CMMDC(j,v[i+1])].v,dp[l1][j].v);
}
}
Adun(dp[(N&1)][v[N]].v,unu);
N&=1;
printf("%d", dp[N][1].v[dp[N][1].v[0]]);
for(i=dp[N][1].v[0]-1;i>0;--i)
printf("%.8d", dp[N][1].v[i]);
printf("\n");
return 0;
}