Cod sursa(job #1254832)

Utilizator MaarcellKurt Godel Maarcell Data 3 noiembrie 2014 16:25:44
Problema Suma divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <iostream>
#include <fstream>
#define prim 9901LL
#define LL long long int
using namespace std;

LL A,B;

LL fast_pow(LL nr, LL p){
    LL res=1,i;
    for (i=1; i<=p; i<<=1){
        if (p&i)
            res=(res*nr)%prim;
        nr=(nr*nr)%prim;
    }

    return res;
}

LL inv(LL nr){
    return fast_pow(nr,prim-2);
}

LL get_sum(){
    LL i,cnt,res=1;
    for (i=2; i*i<=A; i++)
        if (A%i==0){
            cnt=0;
            while(A%i==0)
                cnt++,A/=i;
            res=(((res*(fast_pow(i,cnt*B+1)-1))%prim)*inv(i-1))%prim;
        }

    if (A>1)
        res=(((res*(fast_pow(A,B+1)-1))%prim)*inv(A-1))%prim;

    return res;
}

int main(){
    ifstream in("sumdiv.in");
    ofstream out("sumdiv.out");
    in >> A >> B;
    if (B==0){
        out << 1;
        return 0;
    }
    out << get_sum();


    return 0;
}