Cod sursa(job #3233456)

Utilizator MirceaDonciuLicentaLicenta Mircea Donciu MirceaDonciuLicenta Data 3 iunie 2024 14:58:01
Problema Suma divizorilor Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;

const int MOD = 9901;

// Funcție pentru a calcula exponențierea modulară
long long modExp(long long base, long long exp, long long mod) {
    long long result = 1;
    while (exp > 0) {
        if (exp % 2 == 1) {
            result = (result * base) % mod;
        }
        base = (base * base) % mod;
        exp /= 2;
    }
    return result;
}

// Funcție pentru a calcula suma divizorilor unui număr
long long sumDivisors(long long num) {
    long long sum = 1;
    for (long long i = 2; i <= sqrt(num); ++i) {
        if (num % i == 0) {
            long long tempSum = 1;
            long long tempProd = 1;
            while (num % i == 0) {
                num /= i;
                tempProd *= i;
                tempSum += tempProd;
            }
            sum *= tempSum;
        }
    }
    if (num > 1) {
        sum *= (1 + num);
    }
    return sum;
}

int main() {
    ifstream inFile("sumdiv.in");
    ofstream outFile("sumdiv.out");

    long long A, B;
    inFile >> A >> B;

    long long AB = modExp(A, B, MOD);
    long long sum = sumDivisors(AB);
    long long result = sum % MOD;

    outFile << result << endl;

    inFile.close();
    outFile.close();

    return 0;
}