Cod sursa(job #3003371)

Utilizator RolandPetreanPetrean Roland RolandPetrean Data 15 martie 2023 18:06:19
Problema GFact Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.8 kb
// https://www.infoarena.ro/problema/gfact
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'

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

#define int long long

signed main() {
  int p, q;
  fin>>p>>q;

  vector<pair<int,int>> f{};
  for (int d=2; d*d<=p; ++d) {
    if (p%d==0) {
      int e=0;
      while (p%d==0) {
        p /= d;
        ++e;
      }
      f.push_back({d, e*q});
    }
  }
  if (p>1) f.push_back({p, q});

  int l=1, r=1e18, res=r;
  while (l <= r) {
    int mid=(l+r)/2;

    bool ok=true;
    for (int i=0; i<(int)f.size(); ++i) {
      int x=f[i].first, e=0;
      while (x <= mid) {
        e += mid/x;
        x *= f[i].first;
      }
      if (e<f[i].second) ok = false;
    }

    if (ok) {
      res = mid;
      r = mid-1;
    } else l = mid+1;
  }

  fout<<res;
}