Cod sursa(job #2875437)

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

using namespace std;

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

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

    return p % MOD;
}

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

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