Cod sursa(job #2073204)

Utilizator Stefan_RaduStefan Radu Stefan_Radu Data 22 noiembrie 2017 19:57:02
Problema Suma divizorilor Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <fstream>

using namespace std;

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

const int MOD = 9901;

int Raise(long long a, int p) {

  int ans = 1;
  while (p) {
    if (p & 1) {
      ans = (ans * a) % MOD;
    }

    a = (a * a) % MOD;
    p >>= 1;
  }

  return ans;
}

void Solve(int a, int b) {

  long long s = 1ll;
  for (int i = 2; i * i <= a; i ++) {
    if (a % i) {
      continue;
    }

    int cur_exp = 0;
    while (a % i == 0) {
      a /= i;
      cur_exp ++;
    } 
    cur_exp *= b;
    long long cur_nr = Raise(i, cur_exp);
    s *= ((cur_nr * i) - 1) / (i - 1);
    s %= MOD;
  }

  if (a != 1) {

    long long cur_nr = Raise(a, b);
    long long k = ((cur_nr * a - 1) / (a - 1)) % MOD;
    s *= k;
    s %= MOD;
  }

  cout << s << '\n';
}

int main(int argc, char const *argv[]) {
  
  int a, b;
  cin >> a >> b;
  Solve(a, b);
}