Cod sursa(job #2875448)

Utilizator indianu_talpa_iuteTisca Catalin indianu_talpa_iute Data 21 martie 2022 17:35:25
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <bits/stdc++.h>
#define MAXN 1000
#define MOD 9973

using namespace std;

ifstream fin("ssnd.in");
ofstream fout("ssnd.out");

long long logpow(long long n, long long k) {
    n %= MOD;
    long long p = 1;
    while (k) {
        if (k % 2)
            p = p * n % MOD;
        n = n * n % MOD;
        k /= 2;
    }

    return p % MOD;
}

void rezolvare(long long n) {
    long long nrDiv = 1, sumDiv = 1;
    if (n % 2 == 0) {
        long long p = 0;
        while (n % 2 == 0)
            p++, n /= 2;
        nrDiv *= p + 1, sumDiv *= (logpow(2, p + 1) - 1);
    }
    for (long long d = 3; 1LL * d * d <= n; d += 2)
        if (n % d == 0) {
            long long p = 0;
            while (n % d == 0)
                p++, n /= d;
            nrDiv *= p + 1, sumDiv *= (logpow(d, p + 1) - 1) / (d - 1);
        }
    if (n > 1)
        nrDiv *= 2, sumDiv *= (1LL * n * n % MOD - 1) / (n - 1);
    fout << nrDiv % MOD << ' ' << sumDiv % MOD << '\n';
}

int main() {
    long long t;
    for (fin >> t; t; t--) {
        long long x;
        fin >> x;
        rezolvare(x);
    }
    return 0;
}