Cod sursa(job #3187808)

Utilizator SSKMFSS KMF SSKMF Data 30 decembrie 2023 15:12:57
Problema Suma divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <fstream>
using namespace std;

ifstream cin ("sumdiv.in");
ofstream cout ("sumdiv.out");

const int mod = 9901;

int Exponentiere (int baza , int exponent)
{
    int rezultat = 1;
    while (exponent)
    {
        if (exponent & 1)
            { rezultat = rezultat * baza % mod; }

        baza = baza * baza % mod;
        exponent >>= 1;
    }

    return rezultat;
}

int ExponentiereSuma (int baza , int exponent)
{
    if (exponent == 0)
        { return 1; }

    if (exponent & 1)
        { return (baza * ExponentiereSuma(baza , exponent - 1) + 1) % mod; }

    const int factor = ExponentiereSuma(baza , exponent >> 1);
    return (factor + (factor - 1) * Exponentiere(baza , exponent >> 1) % mod) % mod;
}

int main ()
{
    int valoare , exponent;
    cin >> valoare >> exponent;

    int suma = 1;
    for (int factor = 2 ; factor * factor <= valoare ; factor++) {
        if (valoare % factor == 0)
        {
            int _exponent = 0;
            while (valoare % factor == 0) {
                valoare /= factor;
                _exponent++;
            }

            suma = suma * ExponentiereSuma(factor , exponent % (mod - 1) * _exponent) % mod;
        }
    }

    if (valoare > 1)
        { suma = suma * ExponentiereSuma(valoare % mod , exponent) % mod; }

    cout << suma;
    cout.close(); cin.close();
    return 0;
}