Cod sursa(job #2982183)

Utilizator pifaDumitru Andrei Denis pifa Data 19 februarie 2023 17:47:22
Problema Suma divizorilor Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <ext/rope>
#include <bits/stdc++.h>

using namespace __gnu_cxx;
using namespace std;

using ll = long long;

ifstream in("sumdiv.in");
ofstream out("sumdiv.out");
ll a, b;
const int MOD = 1e9 + 7;
ll fastpow(ll base, ll exp)
{
    ll p = 1;
    while(exp)
    {
        if(exp % 2)
            p = p * base % MOD;
        base = base * base % MOD;
        exp /= 2;
    }
    return p % MOD;
}

int main()
{
    in >> a >> b;
    ll ans = 1;
    ll d = 2, p;
    while(a > 1)
    {
        p = 0;
        while(a % d == 0)
        {
            a /= d;
            ++p;
        }
        if(p > 0)
        {
            p *= b;
            ans = ans * ((fastpow(d % MOD, p + 1) - 1 + MOD) % MOD * fastpow((d - 1) % MOD, MOD - 2) % MOD) % MOD;
        }
        ++d;
        if(d * d > a && a > 1)
        {
            d = a;
        }
    }
    out << ans % MOD;
    return 0;
}