Cod sursa(job #2526809)

Utilizator iancupoppPopp Iancu Alexandru iancupopp Data 19 ianuarie 2020 11:28:54
Problema GFact Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <fstream>

using namespace std;

ifstream in ("gfact.in");
ofstream out ("gfact.out");

const long long VM = 6e13;
pair <long long, long long> v [100000];
long long n;

long long putere (long long x, long long p) {
  long long r;
  r = 0;
  while (x >= p) {
    x /= p;
    r += x;
  }
  return r;
}

bool bun (long long x) {
  long long b, e;
  for (long long i = 1; i <= n; i ++) {
    b = v [i].first;
    e = v [i].second;
    if (b !=0) if (putere (x, b) < e)
      return false;
  }
  return true;
}

long long cbin () {
  long long st, dr, m;
  st = 1; dr = VM;
  while (st < dr) {
    m = (st + dr) / 2;
    if (bun (m))
      dr = m;
    else
      st = m + 1;
  }
  return st;
}

int main() {
  long long p, q, r, put;
  in >> p >> q;
  n = 0;
  for (long long d = 2; d * d <= p; d ++) {
    n ++; put = 0;
    while (p % d == 0) {
      p /= d;
      put ++;
    }
    if (put > 0) {
      v [n].first = d;
      v [n].second = put * q;
    }
  }
  if (p > 1) {
    n ++;
    v [n].first = p;
    v [n].second = q;
  }
  r = cbin ();
  out << r;
  return 0;
}