Cod sursa(job #2988207)

Utilizator stefanrotaruRotaru Stefan-Florin stefanrotaru Data 3 martie 2023 19:55:35
Problema Suma divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("ssnd.in");
ofstream g("ssnd.out");

const long long MOD = 9901;
long long a, b;

long long logPut (long long a, long long b)
{
    long long rez = 1;

    while (b) {
        if (b & 1) {
            rez = (rez * a) % MOD;
            b--;
        }

        a = (a * a) % MOD;
        b /= 2;
    }

    return rez;
}

long long factPrim[10], expPrim[10];
long long nrPrim;

int main()
{
    f >> a >> b;

    if (a == 0) {
        g << 0;
        return 0;
    }

    if (a % 2 == 0) {
        factPrim[++nrPrim] = 2;

        while (a % 2 == 0) {
            expPrim[nrPrim]++;
            a /= 2;
        }
    }

    for (long long i = 3; i * i <= a; ++i) {
        if (a % i == 0) {
            factPrim[++nrPrim] = i;

            while (a % i == 0) {
                expPrim[nrPrim]++;
                a /= i;
            }
        }
    }

    long long sum = 1;

    for (long long i = 1; i <= nrPrim; ++i) {
        expPrim[i] *= b;

        sum = ((sum * (logPut(factPrim[i], expPrim[i] + 1) - 1) ) / (factPrim[i] - 1) ) % MOD;
    }

    g << sum;

    g.close();
    f.close();

    return 0;
}