Cod sursa(job #2923652)

Utilizator raresgherasaRares Gherasa raresgherasa Data 17 septembrie 2022 14:33:22
Problema GFact Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <bits/stdc++.h>
#define ll long long
using namespace std;

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

ll p, q;
vector<pair<ll, ll>>v;

void precalc (){
  ll d = 2;
  while (p > 1){
    ll u = 0;
    while (p % d == 0){
      p = p / d;
      u += 1;
    }
    if (u > 0){
      v.push_back({d, q * u});
    }
    if (d == 2){
      d += 1;
    }
    else{
      d += 2;
    }
    if (d * d > p && p > 1){
      d = p;
    }
  }
}

bool solve (ll x){
  for (int i = 0; i < (int)v.size(); i++){
    ll dv = v[i].first, ans = 0, y = x;
    while (y > 0){
      ans += y / dv;
      y /= dv;
    }
    if (ans < v[i].second){
      return false;
    }
  }
  return true;
}

int main(){
  fin >> p >> q;
  precalc();
  ll l = 0, r = 1e18, ans = 1e18;
  while (l <= r){
    ll mid = l + (r - l) / 2;
    if (solve(mid)){
      ans = min(ans, mid);
      r = mid - 1;
    }
    else{
      l = mid + 1;
    }
  }
  fout << ans;
}