Pagini recente » Cod sursa (job #836927) | Cod sursa (job #1300789) | Cod sursa (job #1473153) | Cod sursa (job #894035) | Cod sursa (job #2273061)
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int P=(int)1e9;
class big
{
private :
int cif[20];
int len;
public :
void operator = (const int &a)
{
int x=a;
len=0;
while(x)
{
cif[++len]=x%P;
x/=P;
}
reverse(cif+1,cif+len+1);
}
big operator += (const big &a)
{
big ans;
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];
ans.cif[i]=aux%10;
rezid=aux/10;
}
ans.len=i-1;
len=ans.len;
for(int i=1;i<=len;i++)
{
cif[i]=ans.cif[i];
}
}
void print()
{
printf("%d",cif[len]);
for(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];
inline void Bgcd()
{
for(int i=1;i<LIM;i++)
{
g[i][1]=g[1][i]=1;
g[i][i]=i;
}
for(int i=2;i<LIM;i++)
{
for(int j=2;j<i;j++)
{
g[i][j]=g[j][i]=g[i-j][j];
}
}
}
big dp[N][LIM];
int main()
{
freopen("indep.in","r",stdin);
freopen("indep.out","w",stdout);
Bgcd();
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
dp[i][x]=1;
for(int ant=1;ant<LIM;ant++)
{
dp[i][ant]+=dp[i-1][ant];
int now=g[ant][x];
dp[i][now]+=dp[i-1][ant];
}
}
dp[n][1].print();
return 0;
}