Cod sursa(job #3314842)

Utilizator filipdanieloanFilip-Daniel Oancea filipdanieloan Data 11 octombrie 2025 12:16:00
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 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;
}