Cod sursa(job #1593221)

Utilizator mirupetPetcan Miruna mirupet Data 8 februarie 2016 13:51:04
Problema GFact Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;

int put;
int P, Q;
long long MAX;
long long bs(int, int);

int main()
    {
        freopen("gfact.in","r",stdin);
        freopen("gfact.out","w",stdout);

        scanf("%d%d", &P, &Q);

        int i = 2;
        while (P > 1)
        {
            if (i * i > P)
                i = P;
            int put = 0;
            while (P % i == 0)
            {
                put ++;
                P /= i;
            }
            long long sol = bs(i, put * Q);
            if (sol > MAX)  MAX = sol;
            i++;
        }

        printf("%lld", MAX);
    }

long long bs(int A, int B)
{
    long long left = 0, right = 1LL * A * B;

    while (left <= right)
    {
        long long ans = (left + right) / 2;
        int sol = 0, C = A;
        while (C <= ans)
        {
            sol += ans / C;
            C *= A;
        }

        if (sol < B)
            left = ans + 1;
        else
            right = ans - 1;
    }

    return left;
}