Cod sursa(job #1122773)

Utilizator NarTooNNever Roll NarTooN Data 25 februarie 2014 20:22:34
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
//http://www.infoarena.ro/problema/sumdiv
#include <iostream>
#include <fstream>
#define ll long long
using namespace std;
ifstream f("sumdiv.in");
ofstream g("sumdiv.out");
int MOD = 9901;
ll A, B, sd = 1;
int pow(int x, int p)
{
    int rez = 1; x %= MOD;
    for(; p; p >>= 1)
    {
        if(p & 1)
        {
            rez *= x;
            rez %= MOD;
        }
        x *= x;
        x %= MOD;
    }
    return rez;
}
int main()
{
     f>>A>>B;
    for(int i=2;i*i<=A;i++)
    {
        if(A%i) continue;
        ll fr=0;
        while(A%i==0)
        {
            A/=i;
            fr+=B;
        }
        ll p1 = (pow(i, fr + 1) - 1 + MOD) % MOD;
        ll p2 = (pow(i - 1, MOD - 2)) % MOD;
        sd = (((sd * p1) % MOD) * p2) % MOD;
    }
    if(A > 1)
        if(A % MOD != 1)
        {
            ll p1 = (pow(A, B + 1) - 1 + MOD) % MOD;
            ll p2 = (pow(A - 1, MOD - 2)) % MOD;
            sd = (((sd * p1) % MOD) * p2) % MOD;
        }
        else
            sd = (1LL * sd * (B + 1)) % MOD;
    g<<sd;
    return 0;
}