Cod sursa(job #3322566)

Utilizator horatiu.avramAvram Popa Cristian Horatiu horatiu.avram Data 14 noiembrie 2025 19:20:17
Problema Suma divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <bits/stdc++.h>

using namespace std;

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

const int MOD=9901;

int euler(int n) {
    int res=n,d=2;
    while(d*d<=n) {
        if(n%d==0) {
            res=(res/d)*(d-1);
            while(n%d==0) {
                n/=d;
            }
        }
        d++;
    }
    if(n!=1) {
        res=(res/n)*(n-1);
    }
    return res;
}

int lgpow(int a,int e) {
    a%=MOD;
    int p=1;
    while(e) {
        if(e%2) {
            p=(p*a)%MOD;
        }
        a=(a*a)%MOD;
        e/=2;
    }
    return p;
}

int inverse(int a,int phi) {
    return lgpow(a,phi-1);
}

int multiply(int sum,int d,int exponent,int phi) {
    if(d%MOD!=1) {
        sum=((long long)sum*(lgpow(d,exponent)-1+MOD)*inverse(d-1,phi))%MOD;
    } else {
        sum=((long long)sum*exponent)%MOD;
    }
    return sum;
}

int main() {
    int d,sum,phi,a,n;
    fin>>a>>n;
    phi=euler(MOD);
    d=2;
    sum=1;
    while(d*d<=a) {
        if(a%d==0) {
            int p=0;
            while(a%d==0) {
                p++;
                a/=d;
            }
            sum=multiply(sum,d,p*n+1,phi);
        }
        d++;
    }
    if(a!=1) {
        sum=multiply(sum,a,n+1,phi);
    }
    fout<<sum;
    return 0;
}