Cod sursa(job #2024911)

Utilizator Mircea_DonciuDonciu Mircea Mircea_Donciu Data 21 septembrie 2017 16:02:51
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream>

using namespace std;

typedef long long int lint;

lint legendre(lint N, int p) {
    lint ans = 0;
    while (N) {
        N /= p;
        ans += N;
    }
    return ans;
}

int main()
{
    ifstream cin("gfact.in");
    ofstream cout("gfact.out");

    int P, Q;
    cin >> P >> Q;

    if (P == 1) {
        cout << "0\n";
        return 0;
    }

    int k, l;
    for (int i = 2; i * i <= P; ++ i)
        if (P % i == 0) {
            k = i, l = 0;
            while (P % i == 0) {
                P /= i;
                ++ l;
            }
        }

    if (P > 1) {
        k = P;
        l = 1;
    }

    Q *= l;

    lint st = 2;
    lint dr = 1LL * k * Q;
    lint ans = dr + 1;

    while (st <= dr) {
        lint mid = (st + dr) >> 1;
        if (legendre(mid, k) >= Q) {
            ans = mid;
            dr = mid - 1;
        }
        else
            st = mid + 1;
    }

    cout << ans << '\n';
    return 0;
}