Cod sursa(job #3152648)

Utilizator deerMohanu Dominic deer Data 26 septembrie 2023 00:57:05
Problema GFact Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <bits/stdc++.h>
#define limita 45000
using namespace std;
long long p, q;
bool check (unsigned long long val, unsigned long long divisor, unsigned long long exp) {
    unsigned long long count, putere;
    count = 0;
    putere = 1;
    while (putere <= val) {
        putere *= divisor;
        count += val / putere;
    }
    return (count >= exp);
}
long long binary_search (long long baza, long long exp) {
    long long left, right, mid, ans;
    left = 1;
    right = 1e18;
    ans = 0;
    while (left <= right) {
        mid = (left + right) / 2;
        if (check(mid, baza, exp)) {
            ans = mid;
            right = mid - 1;
        } else
            left = mid + 1;
    }
    return ans;
}
int main() {
    ifstream cin("gfact.in");
    ofstream cout("gfact.out");
    long long ans, exp;
    cin >> p >> q;
    ans = 0;
    for (long long baza = 2; baza * baza <= p; baza++) {
        exp = 0;
        while (p % baza == 0) {
            exp++;
            p /= baza;
        }
        if (exp)
            ans = max(ans, binary_search(baza, q * exp));
    }
    if (p > 1)
        ans = max(ans, binary_search(p, q));
    cout << ans;
    return 0;
}