Cod sursa(job #2376709)

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

using namespace std;

map<int, int> m;

int nr(int 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)
{
    int st = 0, dr = 1.5e9, m, l;
    while(st <= dr)
    {
        m = (st + dr) / 2;
        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;
}