Cod sursa(job #1553431)

Utilizator Athena99Anghel Anca Athena99 Data 19 decembrie 2015 20:42:13
Problema Suma divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <fstream>

using namespace std;

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

const int mod= 9901;

int lgput( int x, int p ) {
    int ans= 1;
    for ( ; p>0; p/= 2 ) {
        if ( p%2==1 ) {
            ans= ans*x%mod;
        }
        x= x*x%mod;
    }

    return ans;
}

void solve( int &sol, int p, int e ) {
    int aux= (lgput(p, e+1)-1+mod)%mod;
    int invmod= lgput(p-1, mod-2);
    aux= aux*invmod%mod;
    sol= sol*aux%mod;
}

int main(  ) {
    int a, b, sol= 1;
    fin>>a>>b;
    for ( int i= 2; i*i<=a; ++i ) {
        int e= 0;
        for ( ; a%i==0; a/= i, ++e ) ;
        solve(sol, i, e*b);
    }
    if ( a>1 ) {
        solve(sol, a, b);
    }

    fout<<sol<<"\n";

    return 0;
}