#include #include #include #include using namespace std; typedef long long ll; typedef pair P; typedef pair T; typedef pair Ps; const ll INF = 2e18; const ll fact_table = 3200008; long double Pi = 3.1415926535897932384626; priority_queue pql; priority_queue

pqp; priority_queue

bag; //big priority queue priority_queue ,greater > pqls; priority_queue ,greater

> pqps; //small priority queue //top pop ll dx[8]={1,0,-1,0,1,1,-1,-1}; ll dy[8]={0,1,0,-1,1,-1,-1,1}; char dir[] = "DRUL"; //↓,→,↑,← #define endl "\n" #ifdef ENJAPMA #undef endl #endif #define p(x) cout<>=1;}(x*=a)%=mod;b--;}return x;} void YES(bool cond){ if(cond){ p("YES");}else{ p("NO");} return;} void Yes(bool cond){ if(cond){ p("Yes");}else{ p("No");} return;} ll mygcd(ll a, ll b){ if (a < b) swap(a, b); if (a == b || b == 0) return a; return mygcd(b, a % b); } struct SegmentTree { //SegmentTree seg( vector(l + 5, INF) ); private: ll n; vector node; public: SegmentTree(vector v) { ll sz = v.size(); n = 1; while(n < sz) n *= 2; node.resize(2*n-1, INF); for(int i=0; i=0; i--) node[i] = mygcd(node[2*i+1], node[2*i+2]); } void update(ll x, ll val) { //a[x]をyに更新(小さい方に更新) x += (n - 1); node[x] = val; while(x > 0) { x = (x - 1) / 2; node[x] = mygcd(node[2*x+1], node[2*x+2]); } } ll getgcd(int a, int b, int k=0, int l=0, int r=-1){ // [a, b) の全てについて最大公約数をとる if (r < 0) r = n; if (r <= a || b <= l) return 0ll; if (a <= l && r <= b) return node[k]; ll vl = getgcd(a, b, 2*k+1, l, (l+r)/2); ll vr = getgcd(a, b, 2*k+2, (l+r)/2, r); return mygcd(vl, vr); } }; /* ll fact[fact_table + 5],rfact[fact_table + 5]; void c3_init(){ fact[0] = rfact[0] = 1; for(ll i=1; i<=fact_table; i++){ fact[i] = (fact[i-1]*i) % mod; } rfact[fact_table] = mypow(fact[fact_table],mod - 2, mod); for(ll i=fact_table; i>=1; i--){ rfact[i-1] = rfact[i] * i; rfact[i-1] %= mod; } return;} ll c3(ll n,ll r){ return (((fact[n] * rfact[r]) % mod ) * rfact[n-r]) % mod;} */ bool multicase = false; ll n,m,num,a,b,c,d,e,h,q; ll w, k, ans; ll x[500005], y[500005], z[500005]; ll dp[5005][5005]; string s; void solve(){ cin >> n; vector v; for(ll i=0;i> a; v.pb(a); } SegmentTree seg(v); ll ans = 0; ll ok = 0; ll right = 0; for(ll left = 0; left < n; left ++){ while(right < n && seg.getgcd(left, right + 1) != 1){ right ++; } ans += n - right; if (left == right) right ++; } p(ans); return; } int main(){ // init(); ios::sync_with_stdio(false); cin.tie(nullptr); ll q, testcase = 1; if(multicase){ cin >> q; }else{ q = 1; } while(q--){ // pu("Case ");pu("#");pu(testcase);pu(": "); solve(); testcase++; } // solve(); return 0; }