Cod sursa(job #3150665)

Utilizator SerbanCaroleSerban Carole SerbanCarole Data 17 septembrie 2023 21:09:36
Problema Suma divizorilor Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <fstream>
#define pb push_back
#define int long long
using namespace std;
using pii = pair<int,int>;
ifstream cin("sumdiv.in");
ofstream cout("sumdiv.out");
const int m = 9901;
int a , b;
int fastpow( int x , int y )
{
    if(!y) return 1LL;
    if(y&1) return (x*fastpow(x,y-1))%m;
    int p = fastpow(x,y/2);
    return (p*p)%m;
}
signed main(){
    cin >> a >> b;
    if(!b)
    {
        cout << 1;
        return 0;
    }
    b = b%(m-1);
    int ans = 1;
    for(int i = 2 ; a > 1 && i * i <= a ; i++)
    {
        if(a%i) continue;
        int hm = 0,num;
        while(a>1 && a%i==0)
        {
            ++hm;
            a/=i;
        }
        int val = (hm*b)%(m-1);
        num = fastpow(i,val);
        num = (num*i-1)%m;
        ans = (ans*(num*fastpow(i-1,m-2))%m)%m;
    }
    if(a > 1)
    {
        int nr = fastpow(a,b);
        nr = (nr*a-1)%m;
        ans = (ans*(nr*fastpow(a-1,m-2))%m)%m;
    }
    while(ans<0) ans += m;
    ans %= m;
    cout << ans;
    return 0;
}