Codeforces
CF Step
Youtube Linkedin Discord Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Code: RReeppeettiittiioonn

#include <algorithm>
#include <cmath>
#include <iostream>
#include <map>
#include <queue>
#include <vector>
using namespace std;

void solve() {
    long long n;
    cin >> n;

    if (n <= 2) {
        cout << 0 << "\n";
        return;
    }

    long long ans = 0;
    int digits[64];

    long long S = sqrt(n);
    while ((S + 1) * (S + 1) <= n)
        S++;
    while (S * S > n)
        S--;

    long long limit_b = min(n - 1, S);
    for (long long b = 2; b <= limit_b; b++) {
        long long temp = n;
        int len = 0;

        while (temp > 0) {
            digits[len++] = temp % b;
            temp /= b;
        }

        for (int p = 2; p <= len; p++) {
            if (len % p != 0)
                continue;

            bool ok = true;
            int chunk = len / p;
            for (int i = 0; i < chunk; i++) {
                int base_digit = digits[i * p];
                for (int j = 1; j < p; j++) {
                    if (digits[i * p + j] != base_digit) {
                        ok = false;
                        break;
                    }
                }
                if (!ok)
                    break;
            }
            if (ok)
                ans++;
        }
    }

    long long limit_d = min(n - 1, S);
    for (long long d = 1; d <= limit_d; d++) {
        if (n % d == 0) {
            long long b = (n / d) - 1;

            if (b > limit_b && b >= 2) {
                if (d < b) {
                    ans++;
                }
            }
        }
    }

    cout << ans << "\n";
}
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int t;
    cin >> t;
    while (t--) {
        solve();
    }
    return 0;
}