Cod sursa(job #1115878)

Utilizator gapdanPopescu George gapdan Data 22 februarie 2014 10:06:52
Problema GFact Scor 65
Compilator cpp Status done
Runda preoji_george Marime 1 kb
#include<fstream>
#include<cmath>
using namespace std;
long long p;
int q;
long long cauta_bin(long long dr,int k,int r)
{
    long long st,nr,pr,mij;
    st=1;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        nr=0; pr=k;
        while((mij/pr)!=0) { nr+=(mij/pr); pr*=k; }
        if(nr==r)
        {
            while(mij%k!=0) mij--;
            break;
        }
        else if(nr>r) dr=mij-1;
            else st=mij+1;
    }
      return mij;
}
int main()
{
    fstream f("gfact.in",ios::in);
    fstream g("gfact.out",ios::out);
    f>>p>>q;
    int x=sqrt(p)+1;
    int k=0,Max=0;
    long long sol=0;
    for(k=2;k*k<=p;++k)
    {
        int r=0;
        while(p%k==0) {++r; p/=k;}
        if(r!=0)
        {
            sol=cauta_bin(2*r*k*q,k,r) ;
            if (sol>Max) Max=sol;
        }
    }
    if(p>1)
    {
        k=p;
        int r=q;
        sol=cauta_bin(2*r*k,k,r);
        if (sol>Max) Max=sol;
    }
    g<<sol<<'\n';
    return 0;
}