Cod sursa(job #2694359)

Utilizator SerbaP123Popescu Serban SerbaP123 Data 8 ianuarie 2021 21:55:45
Problema Suma divizorilor Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>
#define MOD 9901;
using namespace std;

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

long long putere(long long first, long long second){
    long long pow = 1;
    while(second){
        if(second % 2 == 1){
            pow = (1LL * pow * first);
        }
        first = 1LL * first * first;
        second /= 2;
    }
    return pow;
}

int main(){
    long long firstNumber, secondNumber;
    cin >> firstNumber >> secondNumber;
    long long divisor = 2;
    long long sumDivisors = 1;
    while(firstNumber > 1){
        long long pow1 = 0;
        while(firstNumber % divisor == 0){
            firstNumber /= divisor;
            pow1++;
        }
        if(pow1){
            pow1 *= secondNumber;
            sumDivisors *= (1LL * (putere(divisor, pow1 + 1) - 1) / (divisor - 1)) % MOD;
        }
        divisor++;
        if(divisor * divisor > firstNumber){
            divisor = firstNumber;
        }
    }
    cout << sumDivisors % MOD;
    return 0;
}