Pagini recente » Cod sursa (job #3222519) | Cod sursa (job #1071871) | Cod sursa (job #2249307) | Cod sursa (job #1160426) | Cod sursa (job #2647015)
#include <bits/stdc++.h>
using namespace std;
#define NMAX 505
#define ll long long
int n,v[NMAX];
struct bigNR{
vector<int> val;
bigNR(){
val.clear();
val.push_back(0);
}
void operator = (int x){
val.clear();
if (x==0){
val.push_back(0);
return;
}
while (x){
val.push_back(x%10);
x/=10;
}
}
void operator *= (int x){
int t = 0;
for (int i=0;i<val.size();i++){
t += val[i]*x;
val[i] = t%10;
t /= 10;
}
while (t){
val.push_back(t % 10);
t /= 10;
}
}
bigNR operator * (const int &oth) const{
bigNR ans;
ans = *this;
ans *= oth;
return ans;
}
void operator += (const bigNR &oth){
int i = 0, t = 0;
for (i=0;i<max(oth.val.size(),val.size());i++){
t += (i < val.size() ? val[i] : 0) + (i < oth.val.size() ? oth.val[i] : 0);
if (i >= val.size()) val.push_back(0);
val[i] = t % 10;
t /= 10;
}
while (t!=0){
if (i >= val.size()) val.push_back(0);
val[i++] = t % 10;
t /= 10;
}
}
bigNR operator + (const bigNR &oth) const{
bigNR ans;
ans = *this;
ans += oth;
return ans;
}
friend ostream &operator << (ostream &output, bigNR &x){
while (x.val.back()==0) x.val.pop_back();
for (int i=x.val.size()-1;i>=0;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];
for (int j=1;j<=1000;j++){
DP[__gcd(j,v[i])] += DP[j];
}
bigNR aux;
aux = 1;
DP[v[i]] += aux;
}
cout << DP[1] << '\n';
return 0;
}