Cod sursa(job #1127682)

Utilizator pop_bogdanBogdan Pop pop_bogdan Data 27 februarie 2014 13:23:34
Problema Suma divizorilor Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.6 kb
#include <fstream>
#include <stack>
using namespace std;
#define MOD 9901
ifstream is ("sumdiv.in");
ofstream os ("sumdiv.out");

int a, b, S;

int LgPow(int x, int y);

int main()
{
    is >> a >> b;
    S = (1LL * a * (LgPow(a, b)-1) ) % MOD;
    --a;
    S = (1LL * S * LgPow(a-1, MOD - 2)) % MOD;
    os << S+1;
    is.close();
    os.close();
    return 0;
}

int LgPow(int x, int y)
{
    int r = 1;
    stack <int> S;
    for (; y; y /= 2) S.push(y%2);
    for (; !S.empty(); S.pop())
    {
        r = (r*r)%MOD;
        if (S.top()==1) r = (r*a)%MOD;
    }
    return r;
};