Cod sursa(job #2497401)

Utilizator divianegoescuDivia Negoescu divianegoescu Data 22 noiembrie 2019 16:40:45
Problema Suma divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <fstream>
#define R 9901
using namespace std;
ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");
long long a,b,d,exp,x,y,sumdiv=1;
int explog(int a,int p){
    if(a==1)return 1;
    if(p==0)return 1;
    if(p==1)return a%R;
    long long r=explog(a,p/2);
    r=r*r;
    if(p%2==0)return r%R;
    return r*a%R;
}
int main(){
    fin>>a>>b;
    for(d=2;d<=a/d;d++){
        if(a%d)continue;
        exp=0;
        while(a%d){
            exp++;
            a/=d;
        }
        exp*=b;
        x=explog(d,exp+1);
        y=explog(d-1,R-2);
        sumdiv*=x*y%R;
        sumdiv%=R;
    }
    if(a>1){
        x=explog(a,b+1)-1;
        y=explog((a-1)%R,R-2);
        sumdiv*=x*y%R;
        sumdiv%=R;
    }
    fout<<sumdiv;
    return 0;
}