Cod sursa(job #2982237)

Utilizator popescuadrianpopescuadrian popescuadrian Data 19 februarie 2023 19:02:57
Problema Suma divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <fstream>
#include <unordered_map>
#define MOD 9901

using namespace std;
ifstream cin("sumadiv.in");
ifstream cout("sumadiv.out");
// function to compute (a^b) % MOD
int power(int a, int b) {
    if (b == 0) {
        return 1;
    } else if (b % 2 == 0) {
        int x = power(a, b / 2);
        return (x * x) % MOD;
    } else {
        int x = power(a, b / 2);
        return (a * x % MOD * x % MOD) % MOD;
    }
}

// function to compute the sum of powers of a prime factor
int prime_sum(int p, int k) {
    if (k == 0) {
        return 1;
    } else if (k % 2 == 0) {
        int x = prime_sum(p, k / 2);
        return ((1 + power(p, k / 2)) % MOD * x) % MOD;
    } else {
        int x = prime_sum(p, k / 2);
        return ((1 + power(p, k / 2) + power(p, k)) % MOD * x) % MOD;
    }
}

int main() {
    int A, B;
    cin >> A >> B;
    unordered_map<int, int> primes;
    for (int i = 2; i * i <= A; i++) {
        while (A % i == 0) {
            primes[i]++;
            A /= i;
        }
    }
    if (A > 1) {
        primes[A]++;
    }
    int s = 1;
    for (auto& [p, k] : primes) {
        s = (s * prime_sum(p, k)) % MOD;
    }
    cout << s << endl;
    return 0;
}