Cod sursa(job #2998741)

Utilizator oana75Ioana Prunaru oana75 Data 9 martie 2023 22:17:51
Problema Suma divizorilor Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <iostream>
#include <fstream>

using namespace std;
const int MOD = 9901;

long long A, B, d, S;

ifstream in("sumdiv.in");
ofstream out("sumdiv.out");

long long exponentiere_rapida(long long baza, long long exp)
{
    long long val = 1;
    while(exp)
    {
        if(exp % 2 != 0)
            val = val * baza % MOD;
        baza = baza * baza % MOD;
        exp /= 2;
    }
    return val;
}

long long InvMod(int nr)
{
    return exponentiere_rapida(nr, MOD - 2);
}

int main()
{
    in >> A >> B;
    S = 1;
    for(d = 2; d * d < A; d++)
        if(A % d == 0)
    {
        int exp = 0;
        long long pow = 1;
        while(A % d == 0)
        {
            exp++;
            A /= d;
            pow = pow * d % MOD;
        }
        S = (S * exponentiere_rapida(pow, B) % MOD * d + MOD - 1) % MOD;
        S = S * InvMod(d - 1) % MOD;
    }
    if(A > 1)
    {
        S = (S * exponentiere_rapida(A, B + 1) % MOD + MOD - 1) % MOD;
        S = S * InvMod(A - 1) % MOD;
    }
    out << S;
    in.close();
    out.close();
    return 0;
}