Cod sursa(job #2085130)

Utilizator nicolaefilatNicolae Filat nicolaefilat Data 9 decembrie 2017 18:55:52
Problema GFact Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <iostream>
#include <fstream>
#include <vector>

typedef unsigned long long int u;

using namespace std;

ifstream in("gfact.in");
ofstream out("gfact.out");

int p,q;
vector<pair<int,u> >perechi;

bool validare(u x){

    bool ok = false;

    for(pair<int,int>it : perechi){
        u a = it.first;
        u p = it.second;
        u cnt = 0;

        while(x >= a){
            cnt += x / a;
            a *= it.first;
        }
        if(p <= cnt)
            ok = true;
    }
    return ok;
}

int main()
{
    in>>p>>q;


    //divizori
    int d = 2;
    u cnt;
    while(d*d <= p){
        cnt = 0;
        if(p % d == 0){
            while(p % d == 0){
                p /= d;
                cnt++;
            }
            perechi.emplace_back(p,cnt*q);
        }
        d++;
    }
    if(p != 1)
        perechi.emplace_back(p,q);

    //cautare binara
    u pas = 1LL<<45,r = 0;

    while(pas){
        if(validare(r+pas) == false)
            r += pas;
        pas >>=1;
    }
    out<<r+1;

    return 0;
}