Pagini recente » Cod sursa (job #191028) | Cod sursa (job #1401832) | Cod sursa (job #556604) | Cod sursa (job #2596712) | Cod sursa (job #2647036)
#include <bits/stdc++.h>
using namespace std;
#define NMAX 505
#define ll long long
int n,v[NMAX];
struct bigNR{
int val[1005];
int sz = 0;
bigNR(){
sz = 1;
}
void operator = (int x){
sz = 0;
if (x==0){
val[++sz] = 0;
return;
}
while (x){
val[++sz] = x % 10;
x/=10;
}
}
void operator += (const bigNR &oth){
int i = 0, t = 0;
for (i=1;i<=max(oth.sz,sz);i++){
t += (i <= sz ? val[i] : 0) + (i <= oth.sz ? oth.val[i] : 0);
if (i > sz) val[++sz] = 0;
val[i] = t % 10;
t /= 10;
}
while (t!=0){
if (i > sz) val[++sz] = 0;
val[i++] = t % 10;
t /= 10;
}
}
friend ostream &operator << (ostream &output, bigNR &x){
while (x.val[x.sz]==0) x.sz--;
for (int i=x.sz;i>=1;i--) output << x.val[i];
return output;
}
} DP[1001];
int main()
{
freopen("indep.in","r",stdin);
freopen("indep.out","w",stdout);
cin >> n;
for (int i=1;i<=n;i++){
cin >> v[i];
}
sort(v+1,v+n+1);
for (int i=1;i<=n;i++){
for (int j=1;j<=v[i];j++){
DP[__gcd(j,v[i])] += DP[j];
}
bigNR aux;
aux = 1;
DP[v[i]] += aux;
}
if (DP[1].sz == 1 && DP[1].val[DP[1].sz] ==0)
cout << 0 << '\n';
else
cout << DP[1] << '\n';
return 0;
}