Cod sursa(job #2251429)

Utilizator DordeDorde Matei Dorde Data 1 octombrie 2018 16:44:21
Problema GFact Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream>

using namespace std;
ifstream f ("gfact.in");
ofstream g ("gfact.out");
typedef long long ll;
ll v [100] , p , q;
inline void desc (int a){
    ll o = 2 , ca = a;
    while (o * o <= ca){
        while (! (a % o))
            a /= o , ++ v [o];
        ++ o;
    }
    if (a > 1)
        v [a] = 1;
    for(o = 2 ; o <= 23 ; ++ o)
        v [o] *= q;
}
inline bool check (ll a){
    int i;
    for(i = 2 ; i <= 23 ; ++ i){
        if (v [i]){
            ll b = i , r = 0 , c = a;
            while (a / b){
                r += a / b;
                b *= i;
            }
            if (r < v [i])
                return false;
        }
    }
    return true;
}
inline ll bsearch (){
    ll pas = (1LL << 60) , found = 0;
    while (pas){
        if (! check (found + pas))
            found += pas;
        pas = (pas >> 1);
    }
    return found + 1;
}
int main()
{
    f >> p >> q;
    desc (p);
    g << bsearch ();
    return 0;
}