Cod sursa(job #2618855)

Utilizator victorzarzuZarzu Victor victorzarzu Data 26 mai 2020 13:58:33
Problema GFact Scor 90
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;
vector<int> prime;

bool is_ok(long long nr, long long val, long long coef)
{
  long long 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)
{
  long long low = 1, high = (long long)1 << 60, mid, rez;
  while(low <= high)
  {
    long long 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, rez = 0;
  for(auto it : prime)
  {
    int cat = 0;
    while(a % it == 0)
    {
      a /= it;
      cat++;
    }
    cat *= q;
    if(cat)
      rez = max(rez, bn(it, cat));
    if(it * it > p)
      break;
  }
  if(a > 1)
    rez = max(rez, bn(a, q));
  g<<rez;
}

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