Cod sursa(job #1553439)

Utilizator Athena99Anghel Anca Athena99 Data 19 decembrie 2015 20:52:06
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>

using namespace std;

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

typedef long long i64;

const i64 mod= 9901;

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

    return ans;
}

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

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

    fout<<sol<<"\n";

    return 0;
}