Cod sursa(job #2497406)

Utilizator divianegoescuDivia Negoescu divianegoescu Data 22 noiembrie 2019 16:44:12
Problema Suma divizorilor Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.82 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;
    int r=explog(a,p/2)%R;
    r=(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)-1;
        if(x<0)x+=R;
        y=explog(d-1,R-2);
        sumdiv*=(x*y)%R;
        sumdiv%=R;
    }
    if(a>1){
        x=explog(a,b+1)-1;
        if(x<0)x+=R;
        y=explog((a-1)%R,R-2);
        sumdiv*=x*y%R;
        sumdiv%=R;
    }
    fout<<sumdiv;
    return 0;
}