Cod sursa(job #2864136)

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

using namespace std;

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

const long long MOD = 9901;

long long a, b, sol;

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

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

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

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

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

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