Pagini recente » Cod sursa (job #1409605) | Cod sursa (job #299844) | Cod sursa (job #1581511) | Cod sursa (job #673141) | Cod sursa (job #2226169)
#include <fstream>
using namespace std;
ifstream cin("indep.in");
ofstream cout("indep.out");
class big
{
private :
short int cif[100];
short int len;
public :
void operator = (const int &other)
{
int aux=other;
len=0;
while(aux)
{
cif[++len]=aux%10;
aux/=10;
}
}
void operator += (const big &other)
{
big ans;
int i=1,rezid=0,sum;
for(i=1;i<=len || i<=other.len || rezid>0;i++)
{
sum=rezid;
if(i<=len)
sum+=cif[i];
if(i<=other.len)
sum+=other.cif[i];
ans.cif[i]=sum%10;
rezid=sum/10;
}
ans.len=i-1;
len=ans.len;
for(int i=1;i<=len;i++)
cif[i]=ans.cif[i];
}
void afis ()
{
for(int i=len;i>=1;i--)
cout<<cif[i];
}
};
const int N=500+1;
const int L=1000+1;
big dp[N][L];
int gcd[L][L];
int fgcd(int a,int b)
{
if(b==0)
return a;
return fgcd(b,a%b);
}
int main()
{
for(int i=1;i<L;i++)
for(int j=1;j<L;j++)
gcd[i][j]=fgcd(i,j);
big v1; v1=1;
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
int foo;
cin>>foo;
dp[i][foo]+=v1;
for(int j=1;j<L;j++)
{
int val=gcd[j][foo];
dp[i][j]+=dp[i-1][j];
dp[i][val]+=dp[i-1][j];
}
}
dp[n][1].afis();
return 0;
}
/**
**/