Pagini recente » Cod sursa (job #979068) | Cod sursa (job #230388) | Cod sursa (job #624295) | Cod sursa (job #2714385) | Cod sursa (job #3347562)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("indep.in");
ofstream fout("indep.out");
struct Big
{
vector<int> c;
Big(int x=0)
{
if(x==0)
return;
while(x)
{
c.push_back(x%10);
x/=10;
}
}
};
int cmmdc(int a,int b)
{
while(b)
{
int r=a%b;
a=b;
b=r;
}
return a;
}
Big aduna(Big a,const Big &b)
{
int t=0;
int n=max((int)a.c.size(),(int)b.c.size());
if((int)a.c.size()<n)
a.c.resize(n,0);
for(int i=0; i<n; i++)
{
int s=a.c[i]+t;
if(i<(int)b.c.size())
s+=b.c[i];
a.c[i]=s%10;
t=s/10;
}
while(t)
{
a.c.push_back(t%10);
t/=10;
}
return a;
}
bool zero(const Big &x)
{
return x.c.empty();
}
void scrie(const Big &x)
{
if(x.c.empty())
{
fout<<0;
return;
}
for(int i=(int)x.c.size()-1; i>=0; i--)
fout<<x.c[i];
}
int main()
{
int n;
fin>>n;
vector<Big> dp(1001),nou(1001);
for(int i=1; i<=n; i++)
{
int x;
fin>>x;
nou=dp;
nou[x]=aduna(nou[x],Big(1));
for(int g=1; g<=1000; g++)
{
if(zero(dp[g]))
continue;
int d=cmmdc(g,x);
nou[d]=aduna(nou[d],dp[g]);
}
dp=nou;
}
scrie(dp[1]);
return 0;
}