Pagini recente » Cod sursa (job #454515) | Cod sursa (job #2099965) | Cod sursa (job #1873909) | Cod sursa (job #660825) | Cod sursa (job #2273063)
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int P=(int)1e9;
class big
{
private :
int cif[20],len;
public :
void operator = (const register int &a)
{
register int x=a;
len=0;
while(x)
{
cif[++len]=x%P;
x/=P;
}
reverse(cif+1,cif+len+1);
}
big operator += (const big &a)
{
register int i,rezid=0,aux;
for(i=1;i<=len || i<=a.len || rezid>0;i++)
{
aux=rezid;
if(i<=len) aux+=cif[i];
if(i<=a.len) aux+=a.cif[i];
cif[i]=aux%P;
rezid=aux/P;
}
len=i-1;
}
void print()
{
printf("%d",cif[len]);
for(register int i=len-1;i>=1;i--)
{
printf("%.9d",cif[i]);
}
printf("\n");
}
};
const int N=500+5;
const int LIM=2*N;
int g[LIM][LIM];
big dp[N][LIM];
int main()
{
freopen("indep.in","r",stdin);
freopen("indep.out","w",stdout);
for(register int i=1;i<LIM;i++)
{
g[i][1]=g[1][i]=1;
g[i][i]=i;
}
for(register int i=2;i<LIM;i++)
{
for(register int j=2;j<i;j++)
{
g[i][j]=g[j][i]=g[i-j][j];
}
}
register int n;
cin>>n;
for(register int i=1;i<=n;i++)
{
register int x;
cin>>x;
dp[i][x]=1;
for(register int ant=1;ant<LIM;ant++)
{
dp[i][ant]+=dp[i-1][ant];
register int now=g[ant][x];
dp[i][now]+=dp[i-1][ant];
}
}
dp[n][1].print();
return 0;
}