Cod sursa(job #2952258)

Utilizator Theo14Ancuta Theodor Theo14 Data 8 decembrie 2022 21:07:30
Problema Suma divizorilor Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<bits/stdc++.h>
#define int long long
#define MOD 9901
using namespace std;
ifstream f("sumdiv.in");
ofstream g("sumdiv.out");

int k;
vector< pair<int,int> >v;

int pw(int a, int b)
{
    int p=1;
    while(b!=0)
    {
        if(b%2==1)
            p=(1LL*p*a)%MOD;
        a=(1LL*a*a)%MOD;
        b/=2;
    }
    return p;
}

signed main()
{
    int i,e=0,a,b,ans=1;
    f>>a>>b;
    while(a%2==0)
        e++,a/=2;
    if(e!=0)
        v.push_back({2,e});
    for(i=3; i*i<=a; i+=2)
    {
        e=0;
        while(a%i==0)
            e++,a/=i;
        if(e!=0)
            v.push_back({i,e});
    }
    if(a!=1)
        v.push_back({a,1});
    for(auto it:v)
    {
        int a=it.first;
        int bb=1LL*it.second*b;
        if(bb!=1)
        {
            ///a^(b+1)-1/a-1
            int val=pw(a,bb+1)%MOD;
            val--;
            if(val<0)
                val+=MOD;
            val=(val*pw(a-1,MOD-2))%MOD;
            ans=(1LL*ans*val)%MOD;
        }
        else
            ans=(1LL*ans*a)%MOD;
    }
    g<<ans;
    return 0;
}