Cod sursa(job #2877925)

Utilizator StefanSanStanescu Stefan StefanSan Data 25 martie 2022 16:58:25
Problema Suma divizorilor Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <fstream>

using namespace std;

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

const int MOD = 9901;

int powlg(int x, int m, int mod){
        int val = 1;
        while(m > 0) {
                if(m & 1)
                        val = 1LL * val * x % mod;
                x = 1LL * x * x % mod;
                m >>= 1;
        }
        return val;
}

inline int inv(int n){
        return powlg(n, MOD - 2, MOD);
}

int main(){

        int a, b, p = 1;
        in >> a >> b;
        if(a % 2 == 0) {
                int ex = 0;
                while(a % 2 == 0) {
                        ex++;
                        a /= 2;
                }
                ex *= b;
                p = (p * (powlg(2, ex + 1, MOD) - 1) % MOD) % MOD;
        }

        for(int i = 3; i * i <= a; i += 2) {
                if(a % i == 0) {
                        int ex = 0;
                        while(a % i == 0) {
                                ex++;
                                a /= i;
                        }
                        ex *= b;
                        p = ((p * (powlg(i, ex + 1, MOD) - 1) % MOD) % MOD * inv(i - 1)) % MOD;
                }
        }

        if(a > 1)
                p = ((p * (powlg(a, b + 1, MOD) - 1) % MOD) % MOD * inv(a - 1)) % MOD;

        if(p < 0)
                out << p + MOD;
        else
                out << p;

        return 0;
}