Cod sursa(job #756418)

Utilizator a_h1926Heidelbacher Andrei a_h1926 Data 9 iunie 2012 16:49:32
Problema Suma divizorilor Scor 80
Compilator cpp Status done
Runda Remember Mihai Pătrașcu Marime 0.93 kb
#include <cstdio>
#include <vector>

#define Mod 9901
#define LL long long

using namespace std;

int A, B, S;

inline int Pow (int X, LL P)
{
    int R=1; X%=Mod;
    while (P)
    {
        if (P%2==0) X=(X*X)%Mod, P/=2;
        else R=(R*X)%Mod, --P;
    }
    return R;
}

inline int MI (int X)
{
    return Pow (X, (LL)Mod-2);
}

inline int ComputeF (int X, LL P)
{
    return (((Pow (X, P+1)-1+Mod)%Mod)*MI (X-1))%Mod;
}

void Solve ()
{
    S=1;
    for (int i=2; i*i<=A and A>1; ++i)
    {
        int e=0;
        for (; A%i==0; A/=i, ++e);
        if (e) S=(S*ComputeF (i, 1LL*e*B))%Mod;
    }
    if (A>1) S=(S*ComputeF (A, 1LL*B))%Mod;
}

void Read ()
{
    freopen ("sumdiv.in", "r", stdin);
    scanf ("%d %d", &A, &B);
}

void Print ()
{
    freopen ("sumdiv.out", "w", stdout);
    printf ("%d\n", S);
}

int main ()
{
    Read ();
    Solve ();
    Print ();
    return 0;
}