Cod sursa(job #1487985)

Utilizator vladrochianVlad Rochian vladrochian Data 17 septembrie 2015 19:10:33
Problema Suma divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>
using namespace std;

const int kMod = 9901;

ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");

int A, B, ans = 1;

int Pow(int base, int p) {
  int ans = 1;
  while (p) {
    if (p & 1)
      ans = (ans * base) % kMod;
    base = (base * base) % kMod;
    p >>= 1;
  }
  return ans;
}

int Div(int a, int b) {
  return (a * Pow(b, kMod - 2)) % kMod;
}

int Minus1(int x) {
  return (x - 1 + kMod) % kMod;
}

void Add(int fact, int p) {
  ans = (ans * Div(Minus1(Pow(fact, p * B + 1)), Minus1(fact))) % kMod;
}

int main() {
  fin >> A >> B;
  for (int i = 2; i * i <= A; ++i)
    if (A % i == 0) {
      int pw = 0;
      while (A % i == 0) {
        A /= i;
        ++pw;
      }
      Add(i, pw);
    }
  if (A > 1)
    Add(A, 1);
  fout << ans << "\n";
  return 0;
}