Pagini recente » Cod sursa (job #5277) | Cod sursa (job #2350380) | Cod sursa (job #538703) | Cod sursa (job #1887709) | Cod sursa (job #3269771)
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
struct baban {
vector<int> v;
const static int base = 1e9;
baban () {}
baban (int x) {
v.clear();
while (x) {
v.push_back(x % base);
x /= base;
}
}
void normalize () {
for (int i = 0; i < (int) v.size(); i++) {
if (v[i] >= base) {
if (i == (int) v.size() - 1) {
v.push_back(0);
}
v[i + 1] += v[i] / base;
v[i] %= base;
} else if (v[i] < 0) {
v[i] += base;
v[i + 1]--;
}
}
while ((int) v.size() > 1 && v.back() == 0) {
v.pop_back();
}
}
baban operator + (const baban &other) {
baban res;
for (int i = 0; i < (int) max(other.v.size(), v.size()); i++) {
int t = 0;
if (i < (int) v.size()) {
t += v[i];
}
if (i < (int) other.v.size()) {
t += other.v[i];
}
res.v.push_back(t);
}
res.normalize();
return res;
}
void operator += (const baban &other) {
*this = *this + other;
}
friend ostream& operator << (ostream &output, const baban &v) {
output << (v.v.empty() ? 0 : v.v.back());
for (int i = (int) v.v.size() - 2; i >= 0; i--) {
output << setw(9) << setfill('0') << v.v[i];
}
return output;
}
};
const int MAX = 1005;
baban dp[MAX];
/**
dp[i] - nr. de subsiruri cu cmmdc i
*/
int main()
{
ifstream cin("indep.in");
ofstream cout("indep.out");
int n;
cin >> n;
for (int i = 1; i <= n; ++i)
{
int x;
cin >> x;
for (int j = 1; j <= 1000; ++j)
dp[__gcd(x, j)] += dp[j];
dp[x] = 1;
}
cout << dp[1];
return 0;
}