Cod sursa(job #1593217)

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

int k, put, i = 3;
long long  P, Q, MAX;
long long bs(int, int);

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

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

        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);
            MAX = 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;
}