Cod sursa(job #3152629)

Utilizator deerMohanu Dominic deer Data 25 septembrie 2023 22:22:49
Problema GFact Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <bits/stdc++.h>
#define limita 45000
using namespace std;
int divisor, p, q;
bool check (unsigned long long val) {
    unsigned long long count, putere;
    count = 0;
    putere = 1;
    while (putere <= val) {
        putere *= divisor;
        count += val / putere;
    }
    return (count >= q);
}
void prec () {
    bool composed[45005];
    vector<int> prime_numbers;
    composed[0] = true;
    composed[1] = true;
    for (int i = 2; i * i <= limita; i++) {
        if (composed[i] == false) {
            for (int j = i * i; j <= limita; j += i)
                composed[j] = true;
        }
    }
    for (int i = 1; i <= limita; i++) {
        if (composed[i] == false)
            prime_numbers.push_back(i);
    }
    divisor = p;
    for (int i = 0; i <= prime_numbers.size(), prime_numbers[i] * prime_numbers[i] <= p; i++) {
        if (p % prime_numbers[i] == 0)
            divisor = prime_numbers[i];
    }
}
int main() {
    ifstream cin("gfact.in");
    ofstream cout("gfact.out");
    int left, right, mid, ans;
    cin >> p >> q;
    prec();
    left = 1;
    right = 600000000000000;
    while (left <= right) {
        mid = (left + right) / 2;
        if (check(mid)) {
            ans = mid;
            right = mid - 1;
        } else
            left = mid + 1;
    }
    cout << ans;
    return 0;
}