Pagini recente » Cod sursa (job #925037) | Cod sursa (job #679317) | Cod sursa (job #665859) | Cod sursa (job #1909256) | Cod sursa (job #2610837)
#include <bits/stdc++.h>
using namespace std;
ifstream in("indep.in");
ofstream out("indep.out");
int n,a[501];
string dp[501][1001];
int cmmdc(int a,int b)
{
int rest;
while(b)
{
rest=a%b;
a=b;
b=rest;
}
return a;
}
string add(string a,string b)
{
string c;
c.resize( max(a.size(),b.size())+4 );
for(int i=0;i<c.size()-1;i++)
{
c[i] += (i<a.size()?a[i]-'0':0) + (i<b.size()?b[i]-'0':0);
c[i+1] = c[i]/10;
c[i] = c[i]%10 + '0';
}
c.erase(c.end()-1);
while(c.size()>1 && c[c.size()-1]=='0')
c.erase(c.end()-1);
return c;
}
int main()
{
in>>n;
for(int i=1;i<=n;i++)
in>>a[i];
for(int i=1;i<=n;i++)
for(int j=1;j<=1000;j++)
dp[i][j]="0";
dp[1][ a[1] ]="1";
for(int i=2;i<=n;i++)
{
for(int j=1;j<=1000;j++)
{
dp[i][ cmmdc(j,a[i]) ]=add(dp[i][ cmmdc(j,a[i]) ],dp[i-1][j]);
dp[i][j]=add(dp[i][j],dp[i-1][j]);
}
dp[i][ a[i] ]=add(dp[i][ a[i] ],"1");
}
for(int i=dp[n][1].size()-1;i>=0;i--)
out<<dp[n][1][i];
return 0;
}