Cod sursa(job #3301396)

Utilizator iccjocIoan CHELARU iccjoc Data 25 iunie 2025 18:37:14
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.5 kb
#include <bits/stdc++.h>
using namespace std;

long long MOD = 9973;
vector<int> prime;
bitset<1000005> ciur;

long long pw(long long n, long long m)
{
    if(m == 0)
        return 1;
    if((m & 1))
        return (pw(n, m - 1) * n) % MOD;
    else
    {
        long long x = pw(n, (m >> 1));
        return (x * x) % MOD;
    }
}

void cr()
{
    for(int i = 2; i < 1000005; i++)
    {
        if(!ciur[i])
        {
            prime.push_back(i);
            for(int j = i + i; j < 1000005; j += i)
            {
                ciur[i] = 1;
            }
        }
    }
}

int main()
{
    freopen("ssnd.in", "r", stdin);
    freopen("ssnd.out", "w", stdout);
    cin.tie(nullptr)->sync_with_stdio(false);
    prime.push_back(1);
    cr();
    int t;
    cin >> t;
    for(int ti = 0; ti < t; ti++)
    {
        long long n;
        cin >> n;
        long long nr = 1, sm = 1;
        for(int i = 1; i <= prime.size() && 1LL * prime[i] * prime[i] <= n; i++)
        {
            if(n % prime[i])
                continue;
            int p = 0;
            while(n % prime[i] == 0)
            {
                n /= prime[i];
                p++;
            }
            nr *= (p + 1);
            sm = ((sm * (pw(prime[i], p + 1) - 1) % MOD) * (pw(prime[i] - 1, MOD - 2) % MOD)) % MOD;
        }
        if(n > 1)
        {
            nr *= 2;
            sm = (1LL * sm * (n + 1)) % MOD;
        }
        cout << nr << " " << sm << "\n";
    }
}