Cod sursa(job #1835542)

Utilizator ionanghelinaIonut Anghelina ionanghelina Data 27 decembrie 2016 00:49:49
Problema GFact Scor 35
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include<bits/stdc++.h>
using namespace std;
long long ans,st,dr,mid;
long long p,q,sol,p1;
long long f(long long x)
{
    long long p=1LL*sol;
    long long fr=0LL;
    while(p<=x)
    {
        fr=fr+(x/p);
        if(p>=(LLONG_MAX/sol)) return fr;
        p*=sol;
    }
    return fr;
}
int main()
{
    freopen("gfact.in","r",stdin);
    freopen("gfact.out","w",stdout);
    scanf("%lld%lld",&p,&q);
    p1=p;
    if(p==1LL)
    {
        printf("1\n");
        return 0;
    }
    for(long long i=2LL;(i*i)<=p1 && p>1LL;i++)
    {
        if(!(p%i))
        {
            sol=i;
            while(!(p%i)) p/=i;
        }
    }
    if(p>1LL) sol=p;
    st=1LL;
    dr=p*q;
    while(st<=dr)
    {
        long long mid=st+((dr-st)>>1);
        if(f(mid)>=q)
        {
            ans=mid;
            dr=mid-1LL;
        }
            else st=mid+1LL;
    }
    printf("%lld\n",ans);
    return 0;
}