Cod sursa(job #3255687)

Utilizator andreiciocanCiocan Andrei andreiciocan Data 11 noiembrie 2024 20:55:21
Problema Suma divizorilor Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>

using namespace std;
ifstream cin("sumdiv.in");
ofstream cout("sumdiv.out");
const int M=9901;
int plog(int p,int b,int d)
{
    p=p*b;
    int P=1;
    d=d%M;
    while(p!=0)
    {
        if(p%2==1){
            P=P*d;
            P=P%M;
            if(P==0)
                P=M;
        }
       d=d*d%M;
        p/=2;
    }
    return P;
}
int main()
{
    int a,b;
    cin>>a>>b;
    long long d=2,suma=1;
    while(d*d<=a)
    {
        if(a%d==0)
        {
            int p=0;
            long long putere=1;
            while(a%d==0)
            {
                p++;
                a/=d;
            }
            putere=plog(p,b,d)*d%M;
            if(putere==0)
                putere=M;
            putere--;
            suma=(suma*putere)/(d-1)%M;
        }
        d++;
    }
    if(a!=1)
        {
            long long putere=plog(1,b,a)*a%M;
            putere--;
            suma=suma*putere/(a-1)%M;
        }
    cout<<suma;
    return 0;
}