Pagini recente » Cod sursa (job #2485583) | Cod sursa (job #508021) | Cod sursa (job #271332) | Cod sursa (job #1186592) | Cod sursa (job #2061830)
#include <iostream>
#include <cstdio>
#include <vector>
#define B 1000000000
using namespace std;
vector <int> s[1005];
int cmmmc(int a, int b)
{
int r;
while(b!=0)
{
r=a%b;
a=b;
b=r;
}
return a;
}
inline vector<int>adunare(vector<int> a, vector <int> b)
{
int la=a.size(),lb=b.size(),ant=0,lm=max(la,lb);
vector <int> d;
d.clear();
for(int i=0;i<lm || ant!=0;++i)
{
if(i<la)
ant+=a[i];
if(i<lb)
ant+=b[i];
d.push_back(ant%B);
ant/=B;
}
if(d.empty())
d.push_back(0);
return d;
}
int main()
{
freopen("indep.in","r",stdin);
freopen("indep.out","w",stdout);
vector <int> unu;
unu.push_back(1);
int n,a;
scanf("%d", &n);
for(;n>0;--n)
{
scanf("\n%d", &a);
for(int i=1;i<=1000;++i)
{
int c=cmmmc(i,a);
s[c]=adunare(s[c],s[i]);
}
s[a]=adunare(s[a],unu);
}
printf("%d",s[1].back());
for(int i=s[1].size()-2;i>=0;i--)
printf("%d09", s[1][i]);
return 0;
}