Cod sursa(job #2864083)

Utilizator BlueLuca888Girbovan Robert Luca BlueLuca888 Data 7 martie 2022 16:04:20
Problema Suma divizorilor Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <bits/stdc++.h>

using namespace std;

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

const int MOD = 9901;

int a, b, sol;

int dcnt;
pair <int, int> expo[15];
void divd(int d){
    int e = 0;
    while(a % d == 0){
        e++;
        a /= d;
    }
    if(e != 0)
        expo[++dcnt] = {d, e};
}

int lgput(int a, int b){
    int answer = 1;
    while(b != 0){
        if(b&1)
            answer = (long long)answer * a % MOD;
        a = (long long)a * a % MOD;
        b >>= 1;
    }
    return answer;
}

int main (){
    ios_base::sync_with_stdio(false);
    fin.tie(nullptr);
    fout.tie(nullptr);
    fin>>a>>b;

    divd(2);
    divd(3);
    for(int i=5; i<=a/i; i+=6)
        divd(i), divd(i+2);
    if(a > 1)
        divd(a);

    for(int i=1; i<=dcnt; i++)
        expo[i].second *= b;

    sol = 1;
    for(int i=1; i<=dcnt; i++)
        sol = sol * ((lgput(expo[i].first, expo[i].second+1) - 1 + MOD) % MOD) % MOD * ((expo[i].first - 1 + MOD) % MOD) % MOD;
    fout<<sol;
    return 0;
}