Cod sursa(job #2766799)

Utilizator ps2001Silviu Popescu ps2001 Data 3 august 2021 13:44:54
Problema Suma divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <bits/stdc++.h>

using namespace std;

int main()
{
    ifstream fin("sumdiv.in");
    ofstream fout("sumdiv.out");

    int a, b;
    fin >> a >> b;

    vector<int> prime;
    vector<bool> prim(100001, true);

    for (int i = 2; i <= 100000; i++) {
        if (prim[i] == true) {
            prime.push_back(i);
            for (int j = i * 2; j <= 100000; j += i)
                prim[j] = false;
        }
    }

    long long number = 1, sum = 1, d = 0;

    while (a > 1 && prime[d] * prime[d] <= a) {
        long long p = 1, ok = 0;

        while (a % d == 0) {
            p *= prime[d];
            a /= prime[d];
            ok = 1;
        }

        int copy = b;
        if (ok == 1) {
            while (copy != 0) {
                p *= prime[d];
                copy--;
            }

            sum *= (p * prime[d] - 1) / (prime[d] - 1) % 9901;
        }

        d++;
    }

    if (a != 1) {

        int copy = b;
        long long p = 1;

        while (copy != 0) {
            p *= a;
            copy--;
        }
        
        sum *= ((p * a) - 1) / (a - 1) % 9901;
    }

    fout << sum << '\n';

    return 0;
}