Cod sursa(job #1429201)

Utilizator SwagginInMyJaysaaaaaaaaaaaas SwagginInMyJays Data 5 mai 2015 21:05:13
Problema Suma divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <cstdio>
#include <fstream>
#include <cstdlib>
#include <iostream>
#include <utility>
#include <algorithm>
#include <vector>
#include <map>
#include <queue>
#include <string>
#include <cstring>
#include <deque>
#include <list>
#include <unordered_map>
#include <unordered_set>

#define lung long long
#define toolung unsigned long long
#define mp make_pair

#define v.push (v).push_back
#define pii pair <int, int>
#define SORT(x) sort ((x).begin(), (x).end() )

using namespace std;

static const int MOD = 9901;

inline lung pizda (int a, int b) {
    a%=MOD;
    lung sol = 1;
    for (; b ; b >>= 1) {
    if (b & 1)  sol = ( sol * a) % MOD;
    a = (1LL * a * a) % MOD;
    }
    return sol;
}
inline void Fmm_De_inversmodular_prost (lung &x) {
    while (x < 0 ) x += MOD;
}
int main(){
    ifstream cin ("sumdiv.in");
    ofstream cout ("sumdiv.out");
    int x, y;
    lung kush, bere_modulara, rez = 1;
    cin >> x >> y;
    for (int d = 2 ; d * d <= x; ++ d ) {
        if (x % d ) continue ;
        int cnt = 0;
        for ( ; ! (x % d) ; ++cnt, x /= d );
        cnt *= y;
        kush = (pizda (d, cnt + 1) - 1 ) % MOD;
        bere_modulara = pizda (d - 1 , MOD - 2) % MOD;
        Fmm_De_inversmodular_prost(bere_modulara);
        rez*=kush;rez%=MOD;rez*=bere_modulara;rez%=MOD;
    }
    if (x > 1) {
        kush =  ( pizda (x, y + 1) - 1 ) % MOD;
        bere_modulara = pizda(x - 1, MOD - 2) % MOD;
        Fmm_De_inversmodular_prost(bere_modulara);
        rez*=kush;rez%=MOD;rez*=bere_modulara;rez%=MOD;
    }
    cout << rez;
    return 0;
}
//I love bad bitches, that's my fucking problem
//I love bad bitches, that's my fucking problem