#include #define rep(i,n)for(int i=0;iP; typedef long long ll; const int MOD=1000000007; const int INF=0x3f3f3f3f; const ll INFL=0x3f3f3f3f3f3f3f3f; template class SparseTable { const int MAX_LOG=22; vector>t; vectorl2; functionF; public: int n; T INIT; void init(int n_,functionf){ n=n_; F=f; t=vector>(MAX_LOG); rep(i,MAX_LOG)t[i].assign(n,0); l2.assign(n+1,0); int k=0; rep(i,n+1){ while((1<<(k+1))<=i)k++; l2[i]=k; } } void build(int n_,T*a,functionf){ init(n_,f); rep(i,n)t[0][i]=a[i]; for (int i=1;i>n; rep(i,n)scanf("%lld",&a[i]); SparseTableseg; seg.build(n,a,[](ll a,ll b){return __gcd(a,b);}); ll ans=0; rep(i,n){ int ok=n,ng=i-1; while(ok-ng>1){ int t=(ok+ng)/2; if(seg.query(i,t+1)==1)ok=t; else ng=t; } ans+=(n-1)-ok+1; } cout<