Cod sursa(job #879044)

Utilizator repp4raduRadu-Andrei Szasz repp4radu Data 14 februarie 2013 21:53:06
Problema Suma divizorilor Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <fstream>
#include <vector>

#define pb push_back
#define PII pair<int, int>
#define f first
#define s second
#define mp make_pair
#define REST 9901

using namespace std;

int A, B;
vector< PII > V;

void descompune(int A, vector<PII> &V)
{
    for(int i = 2; i * i <= A; i++)
        if(A % i == 0)
        {
            int exp = 0;
            while(A % i == 0) A /= i, exp++;
            V.pb(mp(i, exp * B));
        }
    if(A != 1) V.pb(mp(A, B));
}

int lgput(int base, int put)
{
    int rez = 1;
    for(; put; put >>= 1)
    {
        if(put & 1) rez = (1LL * rez * base) % REST;
        base = (1LL * base * base) % REST;
    }
    return rez;
}

int main()
{
    ifstream in("sumdiv.in"); in>>A>>B; in.close();
    descompune(A, V);
    int rez = 1, add;
    for(size_t i = 0; i < V.size(); i++)
    {
        add = lgput(V[i].f, V[i].s + 1) - 1;
        if(add < 0) add += REST;
        add = (1LL * add * lgput(V[i].f - 1, REST - 2)) % REST;
        rez = (rez * add) % REST;
    }
    ofstream out("sumdiv.out"); out<<rez; out.close();
    return 0;
}