Cod sursa(job #3323056)

Utilizator Andreea3425Diaconu Andreea Andreea3425 Data 16 noiembrie 2025 20:04:43
Problema Suma divizorilor Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream>

using namespace std;

#define MOD 9901

int powlg(int a, int p){
    int s, x;
    s = 1;
    x = a % MOD;
    while (p){
        if (p & 1)
            s = s * x % MOD;
        x = x * x % MOD;
        p >>= 1;
    }
    return s;
}

inline int InvMod(int a){
    return powlg(a, MOD);
}

int fact(int n, int a){
    int x = a % MOD;
    if (x == 0)
        return 1;
    if (x == 1)
        return (n + 1) % MOD;
    return (powlg(a, n + 1) + MOD - 1) * InvMod(a - 1) % MOD;
}

int main()
{
    ifstream cin ("sumdiv.in");
    ofstream cout ("sumdiv.out");

    int a, b, d, sum, p;

    cin >> a >> b;

    sum = 1;
    for (d=2; d*d<=a; d++)
        if (a % d == 0){
            p = 0;
            while (a % d == 0){
                p++;
                a /= d;
            }
            sum = sum * fact(b * p, d) % MOD;
        }

    if (a > 1)
        sum = sum * fact(b, a) % MOD;

    cout << sum << '\n';
    return 0;
}