Cod sursa(job #2756472)

Utilizator Tudor06MusatTudor Tudor06 Data 31 mai 2021 20:51:52
Problema Suma divizorilor Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <iostream>
#include <fstream>

using namespace std;

const int MOD = 9901;

int lgput( int a, int b ) {
    int p = 1;
    while ( b > 0 ) {
        if ( b % 2 == 1 ) {
            p = (long long)p * a % MOD;
        }
        a = (long long)a * a % MOD;
        b /= 2;
    }
    return p;
}
int ans( int a, int b ) {
    int p, d, s = 1;
    d = 2;
    while ( d * d <= a ) {
        p = 0;
        while ( a % d == 0 ) {
            a /= d;
            p ++;
        }
        p *= b;
        if ( p > 0 )
            s = (long long)s * ( lgput( d, p + 1 ) - 1 + MOD ) % MOD * lgput( d - 1, MOD - 2 ) % MOD;
        d += d % 2 + 1;
    }
    if ( a > 1 )
        s = (long long)s * ( lgput( a % MOD, b + 1 ) - 1 + MOD ) % MOD * lgput( (a - 1) % MOD, MOD - 2 ) % MOD;
    return s;
}
int main() {
    ifstream fin( "sumdiv.in" );
    ofstream fout( "sumdiv.out" );
    int a, b;
    fin >> a >> b;
    fout << ans( a, b );
    return 0;
}