Cod sursa(job #2982098)

Utilizator popescuadrianpopescuadrian popescuadrian Data 19 februarie 2023 15:40:47
Problema Suma divizorilor Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.79 kb
#include <fstream>
#include <algorithm>
#include <queue>
#include <string>
#include <vector>
#include <stack>
#include <map>

using namespace std;
ifstream cin("sumdiv.in");
ofstream cout("sumdiv.out");
string s;
long long v[200005];
long long dp[200005];
long long poz[10005];
vector<pair<long long,long long> >vec;
long long prim[40005];
long long cnt=0;
long long inf=1e14;
long long mod=9901;
long long exp(long long val,long long exp)
{
    val=val%mod;
    long long prod=1;
    while(exp)
    {
        if(exp%2==1)
        {
            prod=(prod*val)%mod;
        }
        exp=exp/2;
        val=(val*val)%mod;
    }
    return prod;
}
long long invs(long long val)
{
    return exp(val,mod-2);
}
int main()
{
    long long n,i,j,k,l,z,m,a,b,t=1,suma=0,h,poz1,poz2,c,d,c1,c2,nra,nrc,sol,x2,y2,val,op,q,tip,gc,prod,u,dr,st,diffst,diffdr,ramase,nr,cate,curr,rez,rad,rest,ultimu,primu,leng,e,f,semn,imp,aux,diff;
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    t=1;
    string s;
    string s1;
    char ch;
    long long maxim=2*1e9;
    long long minim=2*-1e9;
    pair<long long,long long>rasp;
    cin>>n>>k;
    if(k==0)
    {
        cout<<1;
        return 0;
    }
    while(n%mod==0)
    {
        n=n/mod;
    }
    long long div=2;
    long long cop=n;
    long long mul=1;
    while(div*div<=cop)
    {
        prod=1;
        while(n%div==0)
        {
            prod=prod*div;
            n=n/div;
        }
        if(prod!=1)
        {
            mul=(mul*((exp(prod,k)*div)%mod+mod-1))%mod;
            mul=(mul*invs(div-1))%mod;
        }
        div++;
    }
    prod=n;
    if(n!=1)
    {
        mul=(mul*(exp(prod,k+1)+mod-1))%mod;
        mul=(mul*invs(prod-1))%mod;
    }
    cout<<mul;
    return 0;
}