#include using namespace std; #ifdef LOCAL #include "debug.h" #else #define DEBUG(...) #endif int ctz(int a) { return __builtin_ctz(a); } int ctz(long long a) { return __builtin_ctzll(a); } template T gcd(T a, T b) { a = abs(a), b = abs(b); if (a == 0) return b; int k = ctz(a | b); a >>= ctz(a); while (b) { b >>= ctz(b); if (a > b) swap(a, b); b -= a; } return a << k; } template struct sparse_table { vector> t; sparse_table(const vector& v = {}) : t{v} { for (int k = 1, n = v.size(); 1 << k <= n; ++k) { t.emplace_back(n - (1 << k) + 1); for (int i = 0; i + (1 << k) <= n; ++i) t[k][i] = gcd(t[k - 1][i], t[k - 1][i + (1 << (k - 1))]); } } T fold(int l, int r) const { assert(l < r); int k = __lg(r - l); return gcd(t[k][l], t[k][r - (1 << k)]); } }; int main() { cin.tie(nullptr); ios::sync_with_stdio(false); int n; cin >> n; vector a(n); for (auto&& e : a) { cin >> e; } sparse_table st(a); auto res = (long long)n * (n + 1) / 2; for (int l = 0, r = 0; l < n; ++l) { while (r <= l or (r <= n and st.fold(l, r) > 1)) { ++r; } res -= r - l - 1; } cout << res << '\n'; }