Cod sursa(job #2426632)

Utilizator sygAndreiIonitaIonita Andrei sygAndreiIonita Data 28 mai 2019 21:42:59
Problema GFact Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>

using namespace std;

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

int v[30],putere[30],k;

void desc (long long p)
{
  long long i;
  for (i=2;i*i<=p;i++)
  {
    if (p%i==0)
    {
      v[++k]=i;
      while (p%i==0)
            putere[k]++,p/=i;
    }
  }
  if (p>1)
    v[++k]=p,putere[k]=1;
}

bool verif(long long a,long long q)
{
  long long s=0,i,b;
  for (i=1;i<=k;i++)
  {
    s=0;
    b=v[i];
    while (b<=a)
      s+=a/b,b*=v[i];
    if (s<putere[i]*q)
        return 0;
  }
  return 1;
}

int main()
{
    long long p,q,st=0,dr=(1LL<<50),mijl,poz;
    in>>p>>q;
    desc(p);
    while (st<=dr)
    {
      mijl=(st+dr)/2;
      if (verif(mijl,q)==1)
            dr=mijl-1,poz=mijl;
      else
        st=mijl+1;
    }
    out<<poz;
    return 0;
}