Cod sursa(job #2496512)

Utilizator DanutAldeaDanut Aldea DanutAldea Data 20 noiembrie 2019 22:42:17
Problema Suma divizorilor Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <fstream>
#include <iostream>
#define mod 9901
using namespace std;

ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");

long long a,b,cnt,sum,x,y,i;

long long pow(long long a, long long b){
    long long r=1;
    a%=mod;
    while(b){
        if(b&1)
            r=(r*a)%mod;

        a=(a*a)%mod;
        b>>=1;
    }

    return r;
}

int main(){
    fin>>a>>b;

    if(b==0){
        fout<<1;
        return 0;
    }

    sum=1;
    for(i=2;i*i<=a;i++){
        if(a%i==0){
            cnt=0;
            while(a%i==0)
                a/=i,cnt++;

            cnt*=b;
            cnt++;

            x=pow(i,cnt)-1;
            if(x<0)
                x+=mod;
            y=pow((i-1+mod)%mod,mod-2);
            x=(x*y)%mod;
            sum=(sum*x)%mod;
        }
    }
    //cout<<sum<<" "<<a<<"\n";

    if(a!=1){
        x=pow(a,b+1)-1;
        //cout<<x<<" ";
        if(x<0)
            x+=mod;
        y=pow((a-1+mod)%mod,mod-2);
        x=(x*y)%mod;
        //cout<<x;
        sum=(sum*x)%mod;
    }

    fout<<sum;

    return 0;
}