func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = (int)2e5 + 5;   int n, a[maxn], vis[2 * maxn], mx[maxn];   long long ans;   vector<int> slist[maxn];   int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }   void doit(int d) {     for (int i = 0; i < d; i++) mx[i] = 0;     for (int i = 0; i < n; i++) vis[i] = 0;     for (int i = 0; i < n; i++) mx[i % d] = max(mx[i % d], a[i]);     for (int i = 0; i < n; i++)       if (a[i] == mx[i % d]) vis[i] = 1;     for (int i = n; i < 2 * n; i++) vis[i] = vis[i - n];     int lst = -1;     for (int i = 2 * n - 1; i >= 0; i--) {       if (vis[i] && lst == -1)         lst = i;       else if (!vis[i])         lst = -1;       if (lst == -1 || i >= n) continue;       int len = lst - i + 1;       int idx =           upper_bound(slist[d].begin(), slist[d].end(), len) - slist[d].begin();       ans += idx;     }   }   int main() {     ios_base::sync_with_stdio(0);     cin.clear();     cin >> n;     for (int i = 0; i < n; i++) cin >> a[i];     for (int i = 1; i < n; i++) slist[gcd(i, n)].push_back(i);     for (int i = 1; i * i <= n; i++) {       if (n % i) continue;       doit(i);       if (n / i != i) doit(n / i);     }     cout << ans;   }   