Cod sursa(job #3216834)

Utilizator BreabanDanielBreaban Daniel-Vasile BreabanDaniel Data 19 martie 2024 23:22:43
Problema Suma divizorilor Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream>
#include <iostream>
#include <vector>
#define MOD 9901

using namespace std;
ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");
vector <pair<long long int,long long int>> di;
long long int A,B,ans=1;
long long int exp(long long int val,long long int e);
int main()
{
    fin>>A>>B;
    int d=2;
    while(d*d<=A)
    {
        int ex=0;
        while(A%d==0)
        {
            ex++;
            A/=d;
        }
        if(ex)
            di.push_back({d,ex});
        d++;
    }
    if(A>1)
    di.push_back({A,1});
    for(int i=0;i<di.size();i++)
    {
        long long int E=di[i].second;
        E=(E%(MOD-1)*B+1)%(MOD-1);
        long long int aux=(exp(di[i].first,E)-1+MOD)%MOD;
        long long int aux1=exp(di[i].first-1,MOD-2)%MOD;
        ans=ans*aux%MOD*aux1%MOD;
    }
    fout<<ans;
    return 0;
}
long long int exp(long long int val,long long int e)
{
    if(!e)
        return 1;
    long long int aux=exp(val,e/2);
    if(e%2)
        return aux*aux%MOD*val%MOD;
    return aux*aux%MOD;
}