Pagini recente » Cod sursa (job #3352937) | Cod sursa (job #3352290) | Cod sursa (job #3352284) | Cod sursa (job #3315074) | Cod sursa (job #3324465)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("indep.in");
ofstream cout("indep.out");
int gcd(int a, int b) {
int r;
while (a % b > 0) {
r = a % b;
a = b;
b = r;
}
return b;
}
void add(vector<int> &a, vector<int> &b, vector<int> &c) {
int t = 0;
if (a[0] < b[0]) a[0] = b[0];
for (int i = 1 ; i <= a[0] ; ++i) {
t = t + a[i] + b[i];
c[i] = t % 10;
t /= 10;
}
if (t > 0) c[++a[0]] = t;
c[0] = a[0];
}
void output(vector<int> &a) {
for (int i = a[0] ; i >= 1 ; --i) {
cout << a[i];
}
}
int n;
vector<int> v, one;
vector<vector<int>> dp;
int main() {
cin >> n;
v.assign(n + 2, 0);
dp.assign(1003, vector<int>(1e4, 0));
one.assign(1e5, 0);
one[0] = one[1] = 1;
dp[0][0] = dp[0][1] = 1;
for (int i = 1 ; i <= n ; ++i) {
cin >> v[i];
}
for (int j = 1 ; j <= n ; ++j) {
for (int i = 1 ; i <= 1000 ; ++i) {
int div = gcd(i, v[j]);
add(dp[div], dp[i], dp[div]);
}
add(dp[v[j]], one, dp[v[j]]);
}
output(dp[1]);
return 0;
}