Cod sursa(job #2497417)

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