Cod sursa(job #2376761)

Utilizator CiprianC111Constantinescu Ciprian CiprianC111 Data 8 martie 2019 17:29:50
Problema GFact Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <bits/stdc++.h>

using namespace std;

map<int, int> m;

int nr(long long n, int p)
{
    long long u = p;
    int k = 0;
    while(u <= n)
        k += n / u, u *= p;
    return k;
}

int l(int n, int p)
{
    long long st = 0, m, dr = 1LL << 40, l;
    while(st <= dr)
    {
        m = (st + dr) >> 1;
        if(nr(m, n) >= p) dr = m - 1, l = m;
        else st = m + 1;
    }
    return l;
}

int main()
{
    freopen("gfact.in", "r", stdin);
    freopen("gfact.out", "w", stdout);
    int p, q, k = 2;
    scanf("%d%d", &p, &q);
    while(p > 1 and k * k <= p)
    {
        while(!(p % k)) m[k] += q, p /= k;
        k++;
    }
    if(p > 1) m[p] = q;
    k = -1;
    for(map<int, int>::iterator it = m.begin(); it != m.end(); it++)
        k = max(k, l(it -> first, it -> second));
    printf("%d", k);
    return 0;
}