Mai intai trebuie sa te autentifici.

Cod sursa(job #1536098)

Utilizator LucianTLucian Trepteanu LucianT Data 25 noiembrie 2015 18:14:32
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <cstdio>
#include <algorithm>
#include <climits>
#define maxN 200005
using namespace std;
long long p, q, i, sol, m;
long long legendre(long long n, long long f)
{
    long long pf=f, sum=0;
    while(pf <= n)
        sum += n/pf, pf *= f;
    return sum;
}
long long cb(long long f,long long pt)
{
    long long st=1, dr=1<<30;
    dr*=dr;
    while(st <= dr)
    {
        m = (st+dr)/2;
        if(legendre(m, f) >= pt)
            dr = m - 1;
        else st = m+1;
    }
    m=(st+dr)/2;
    if(legendre(m,f) < pt)
        m++;
    return m;
}
int main()
{
    freopen("gfact.in", "r", stdin);
    freopen("gfact.out", "w", stdout);
    scanf("%lld %lld", &p, &q);
    long long d=2;
    long long aux=p;
    while(d * d <= aux)
    {
        long long exp=0;
        while(aux%d == 0)
            exp++, aux /= d;
        if(exp)
            sol = max(sol, cb(d, exp*q));
        d++;
    }
    if(aux!=1)
        sol = max(sol, cb(aux, q));
    printf("%lld", sol);
    return 0;
}