Cod sursa(job #3314322)

Utilizator filipdanieloanFilip-Daniel Oancea filipdanieloan Data 9 octombrie 2025 13:44:52
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <bits/stdc++.h>
using namespace std;

constexpr int MOD = 9973;

int long long lgput(int long long a, int long long n, int MOD)
{
    int long long p = 1;
    a %= MOD;
    for(; n; n >>= 1) {
        if(n & 1)
            p = p * a % MOD;
        a = a * a % MOD;
    }
    return p % MOD;
}

void solve()
{
    long long n, nrDiv = 1, sumDiv = 1;
    scanf("%lld", &n);
    long long d = 2;
    while(n > 1) {
        long long p = 0;
        while(n % d == 0) {
            n /= d;
            ++p;
        }
        if(p) {
            nrDiv *= p + 1;
            sumDiv *= (lgput(d, p+1, MOD) - 1) / (d - 1) % MOD;
        }
        ++d;
        if(d * d > n)
            d = n;
    }
    printf("%lld %lld\n", nrDiv, sumDiv);
}

signed main()
{
#ifndef LOCAL
    freopen("ssnd.in", "r", stdin);
    freopen("ssnd.out", "w", stdout);
#endif

    int t;
    scanf("%d", &t);
    while(t--)
        solve();

    return 0;
}