Pagini recente » Rezultatele filtrării | Rezultatele filtrării | Rezultatele filtrării | Rezultatele filtrării | Cod sursa (job #3153689)
#include <fstream>
using namespace std;
ifstream cin ("sumdiv.in");
ofstream cout ("sumdiv.out");
const int mod = 9901;
int invers[9901];
int Exponentiere (int baza , int exponent)
{
int rezultat = 1;
while (exponent)
{
if (exponent & 1)
(rezultat *= baza) %= mod;
(baza *= baza) %= mod;
exponent >>= 1;
}
return rezultat;
}
int main ()
{
invers[0] = invers[1] = 1;
for (int valoare = 2 ; valoare < mod ; valoare++)
invers[valoare] = mod - (mod / valoare) * invers[mod % valoare] % mod;
int valoare , factor_exponent;
cin >> valoare >> factor_exponent;
int suma = 0;
for (int factor = 2 ; factor * factor <= valoare ; factor++)
if (valoare % factor == 0)
{
int exponent = 0;
while (valoare % factor == 0) {
valoare /= factor;
exponent++;
}
suma += (Exponentiere(factor , exponent * factor_exponent + 1) - 1) * invers[factor - 1] % mod;
if (suma >= mod) suma -= mod;
if (suma < 0) suma += mod;
}
if (valoare > 1)
{
suma += (Exponentiere(valoare , factor_exponent + 1) - 1) * invers[valoare - 1] % mod;
if (suma >= mod) suma -= mod;
if (suma < 0) suma += mod;
}
cout << suma;
cout.close(); cin.close();
return 0;
}