Cod sursa(job #1471542)

Utilizator DjokValeriu Motroi Djok Data 14 august 2015 12:21:46
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include<bits/stdc++.h>
using namespace std;

int p,q,a[50],b[50],i,nr;
long long rs;

bool Check(long long x) {
    long long poz=a[i],k=0;
    while(x/poz>0) k+=x/poz,poz*=a[i];
    return (k>=b[i]*q);
}

long long Search(long long st,long long dr) {
    long long poz=dr;
    while(st<=dr)
    {
      long long pivot=(st+dr)/2;
      if(Check(pivot)) poz=pivot,dr=pivot-1;
      else st=pivot+1;
    }
    return poz;
}

int main()
{
  ifstream cin("gfact.in");
  ofstream cout("gfact.out");

  cin>>p>>q;

  if(p==1) return cout<<"1\n",0;

  for(i=2;i*i<=p;++i)
  if(!(p%i)) for(a[++nr]=i;!(p%i);p/=i) ++b[nr];

  if(p>1) a[++nr]=p,b[nr]=1;

  for(i=1;i<=nr;++i) rs=max(rs,Search(1,1LL*a[i]*b[i]*q));

  cout<<rs<<'\n';

 return 0;
}