Cod sursa(job #2418520)

Utilizator SemetgTemes George Semetg Data 5 mai 2019 13:05:52
Problema Suma divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <fstream>
using namespace std;

const string FILE_NAME = "sumdiv";
const int64_t MOD { 9901 };

ifstream in { FILE_NAME + ".in" };
ofstream out { FILE_NAME + ".out" };

int64_t A, B;
int64_t sol { 1 };

int64_t pow(int64_t b, int64_t e) {
    int64_t sol { 1 };
    for (; e; e /= 2, b = b * b % MOD)
        if (e % 2)
            sol = sol * b % MOD;
    
    return sol;
}

inline void desc(int64_t b) {
    if (A % b)
        return;
    
    int64_t e { 0 };
    while (A % b == 0) {
        ++e;
        A /= b;
    }
    
    if (b % MOD == 1) {
        sol = sol * (e * B + 1) % MOD;
    } else {
        sol = sol * (MOD + pow(b, e * B + 1) - 1) % MOD;
        sol = sol * pow(b - 1, MOD - 2) % MOD;
    }
}

int main() {
    in >> A >> B;
    if (!A) {
        out << 0;
        return;
    }
    
    desc(2);
    desc(3);
    
    for (int64_t i { 5 }; i * i <= A; i += 6) {
        desc(i);
        desc(i + 2);
    }
    
    if (A != 1)
        desc(A);
    
    out << sol;
}