Cod sursa(job #2232075)

Utilizator giotoPopescu Ioan gioto Data 17 august 2018 11:41:42
Problema GFact Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <bits/stdc++.h>
using namespace std;

int p, q;
inline int legendre(int x, int y){
    int ans = 0;
    long long p = y;
    while(p <= x){
        ans += x / p;
        p = 1LL * p * y;
    }
    return ans;
}
inline bool check(int x){
    int d = 2, P = p;
    while(d * d <= P){
        if(P % d == 0){
            int k = 0;
            while(P % d == 0)
                P = P / d, ++k;
            if(legendre(x, d) < k * q) return 0;
        }
        ++d;
    }
    if(x > 1) if(legendre(x, P) < q) return 0;
    return 1;

}
int main()
{
    freopen("gfact.in", "r", stdin);
    freopen("gfact.out", "w", stdout);
    scanf("%d%d", &p, &q);
    long long st = 1, dr = 1e18;
    while(st <= dr){
        long long mij = (st + dr) / 2;
        if(check(mij)) dr = mij - 1;
        else st = mij + 1;
    }
    printf("%lld", st);
    return 0;
}