Cod sursa(job #3284281)

Utilizator bogdan1479Luca Bogdan Alexandru bogdan1479 Data 11 martie 2025 12:51:48
Problema Suma divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <fstream>

using namespace std;

const int MOD = 9901;

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

int s = 1;

int powlg(int a, int b)
{
    int val = 1;
    while(b)
    {
        if(b & 1)  val = val * a % MOD;
        a = a * a % MOD;
        b >>= 1;
    }
    return val;
}

inline int invMod(int x)
{
    return powlg(x, MOD - 2);
}

void add(int d, int n)
{
    int x = d % MOD;
    if(!x) return;
    if(x == 1) s = s * (n + 1) % MOD;
    else s = s * (powlg(x, n + 1) - 1) % MOD * invMod(x - 1) % MOD;
}

int main()
{
    int a, b, p;
    fin >> a >> b;
    for(int d = 2; d * d <= a; ++d)
        if(a % d == 0)
        {
            p = 0;
            do
            {
                ++p;
                a /= d;
            }
            while(a % d == 0);
            add(d, b * p);
        }
    if(a > 1) add(a, b);
    fout << s;
    return 0;
}