Cod sursa(job #2618848)

Utilizator victorzarzuZarzu Victor victorzarzu Data 26 mai 2020 13:48:26
Problema GFact Scor 75
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <bits/stdc++.h>
#define maxp 50000

using namespace std;
ifstream f("gfact.in");
ofstream g("gfact.out");
int p, q;
bitset<500005> ciur;
unordered_map<int, int> des;
vector<int> prime;

bool is_ok(int nr, int val, int coef)
{
  int curr = 1, rez = 0;
  while(curr <= nr)
  {
    curr *= val;
    rez += nr / curr;
  }
  if(rez >= coef)
    return true;
  return false;
}

int bn(int val, int coef)
{
  int low = 1, high = 1 << 30, mid, rez;
  while(low <= high)
  {
    int mid = (low + high) / 2;
    if(is_ok(mid, val, coef))
    {
      rez = mid;
      high = mid - 1;
    }
    else
      low = mid + 1;
  }
  return rez;
}

void Read()
{
  f>>p>>q;
  ciur.set(0); ciur.set(1);
  for(int i = 2;i <= maxp;++i)
    if(!ciur.test(i))
    {
      prime.push_back(i);
      for(int j = i;j <= maxp;j += i)
        ciur.set(j);
    }
  int a = p;
  for(auto it : prime)
  {
    while(a % it == 0)
    {
      a /= it;
      des[it]++;
    }
    des[it] *= q;
    if(it * it > p)
      break;
  }
  if(a > 1)
    des[a] = q;
  int rez = 0;
  for(auto it : des)
    if(it.second)
      rez = max(rez, bn(it.first, it.second));
  g<<rez;
}

int main()
{
  Read();
 // Solve();
  return 0;
}