Cod sursa(job #1591208)

Utilizator Matei_IgnutaMatei Ignuta Matei_Ignuta Data 5 februarie 2016 21:32:18
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <stdio.h>

using namespace std;

int p, q;

long long find(int f, int p)
{
    long long st = 0, dr = 1ll * f * p;
    while(st<=dr)
    {
        long long mij = (st+dr)/2;
        int nr = 0;
        long long aux = f;
        while(mij >= aux)
        {
            nr = nr + mij / aux;
            aux = aux * f;
        }
        if(nr < p)
            st = mij + 1;
        else
            dr = mij - 1;
    }
    return st;
}

int main()
{
    freopen("gfact.in", "r", stdin);
    freopen("gfact.out", "w", stdout);
    scanf("%d %d", &p, &q);
    long long ans = 0;
    int f = 2;
    while(p > 1)
    {
        int pow = 0;
        if(f * f > p)
            f = p;
        while(p%f==0)
        {
            pow++;
            p = p / f;
        }
        long long rez = find(f, pow*q);
        if(rez > ans)
            ans = rez;
        f++;
    }
    printf("%lld", ans);
    return 0;
}