Cod sursa(job #756699)

Utilizator Theorytheo .c Theory Data 10 iunie 2012 11:40:18
Problema Suma divizorilor Scor 60
Compilator cpp Status done
Runda Remember Mihai Pătrașcu Marime 0.92 kb
#include<fstream>
#define mod 9901
using namespace std;
ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");
long A, B, S;

long put(long a, long b)
{
    if(!b) return 1;
    if(b % 2)
        return (a * put(a,b - 1)) % mod;
    long t = put(a, b/2) % mod;
    return (t * t) %mod;
}
long desc(int x, int nr)
{
    nr *= B;
    long aux1 = (put(x, nr + 1) - 1 ) % mod;
    long aux2 = put(x - 1, mod - 2) % mod;

    return (aux1 * aux2) %mod;
}
void read()
{
    S = 1;
    fin >>A>>B;
    for(int i = 2; i * i <= A ; ++i)
    {
        if(A % i == 0)
        {
            int nr = 0;
            while(A % i==0)
                A /= i, ++nr;
            long K = desc(i, nr);
            S = S * K % mod;
        }

    }
    //fout << put( 2, 10) ;
    if(A != 1)
        S = (S * desc(A, 1)) % mod;
    fout <<S;

}
int main()
{

    read();
    fin.close();
    return 0;
}