Cod sursa(job #3248842)

Utilizator Mihai_OctMihai Octavian Mihai_Oct Data 13 octombrie 2024 14:34:16
Problema Suma divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");
const long long mod = 1e9 + 7;
long long a, b, d, r;

static inline long long Put(long long a, long long n) {
    long long p = 1;
    a %= mod;
    while(n) {
        if(n & 1) p = (p * a) % mod;
        a = (a * a) % mod;
        n >>= 1;
    }
    return p;
}

static inline long long Inv(long long a) {
    return Put(a, mod - 2);
}

static inline long long Calc(long long d, long long e) {
    long long nr = (Put(a, e) - 1 + mod) % mod;
    return (nr * Inv(d - 1 + mod)) % mod;
}

int main() {
    fin >> a >> b;
    r = 1;
    
    d = 2;
    while(d * d <= a) {
        if(a % d == 0) {
            long long e = 0;
            while(a % d == 0) {
                e++;
                a /= d;
            }
            
            r = (r * Calc(d, e * b + 1)) % mod;
        }
        d++;
    }
    if(a > 1)  r = (r * Calc(a, 1 * b + 1)) % mod;
    fout << r;

    return 0;
}