Cod sursa(job #3216829)

Utilizator BreabanDanielBreaban Daniel-Vasile BreabanDaniel Data 19 martie 2024 23:08:23
Problema Suma divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 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>> div;
long long int A,B,ans=1;
long long int exp(long long int val,int e);
int main()
{
    fin>>A>>B;
    int d=2;
    while(d*d<=A)
    {
        int ex=0;
        while(A%d==0)
        {
            ex++;
            d/=A;
        }
        if(ex)
        div.push_back({d,ex});
        d++;
    }
    if(A>1)
    div.push_back({A,1});
    for(int i=0;i<div.size();i++)
    {
        long long int E=div[i].second;
        E=(E%(MOD-1)*B+1)%(MOD-1);
        long long int aux=(exp(div[i].first,E)-1+MOD)%MOD;
        long long int aux1=exp(div[i].first-1,MOD-2);
        ans=ans*aux%MOD*aux1%MOD;
    }
    fout<<ans;
    return 0;
}
long long int exp(long long int val,int e)
{
    if(!e)
        return 1;
    int aux=exp(val,e/2);
    if(e%2)
        return aux*aux%MOD*val%MOD;
    return aux*aux%MOD;
}