Cod sursa(job #3319666)

Utilizator gicaviitorulgica viitorul gicaviitorul Data 2 noiembrie 2025 13:46:54
Problema Suma divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <bits/stdc++.h>
using namespace std;

#define int unsigned long long
const int MOD = 9901;
int a, b; 
int expmod(int a, int k)
{
    int p = 1;
    while (k > 0)
    {
        if (k % 2 == 1)
        {
            p *= a;
            p %= MOD;
        }
        a *= a;
        a %= MOD;
        k /= 2;
    }
    return p;
}

int inv_mod(int a)
{
    return expmod(a, MOD - 2);
}

int sFact(int d, int ex)
{
    int x = d % MOD;
    if (x == 0) return 1;
    if (x == 1) return (ex+1)%MOD;
    return (expmod(d, ex+1) + MOD - 1) * inv_mod(d-1) % MOD;
}
int sumdiv(int a,int b)
{
    int allput=1;
    int p;
    for (int d = 2; d*d <= a; d++){
        if (a % d == 0)
        {
            p = 0;
            do
            {
                p++;
                a /= d;
            }while (a % d == 0);
            
            
            allput = allput * sFact(d, b*p) % MOD;
        }
    }
    if (a > 1) allput = allput * sFact(a, b) % MOD;
    
    return allput;
}
signed main() 
{
    ifstream cin("sumdiv.in");
    ofstream cout("sumdiv.out");
    int a, b; cin >> a >> b;
    
    cout << sumdiv(a,b);
}