Cod sursa(job #2832719)

Utilizator andreea_chivuAndreea Chivu andreea_chivu Data 14 ianuarie 2022 10:54:57
Problema GFact Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <iostream>
#include <fstream>
#include <climits>

using namespace std;

long long d[100];
long long q[100];

bool verif(long long n, long long nr_div, long long b){
    long long mini = -1;
    for(int i = 0; i < nr_div; i++){
        long long x = 0;
        long long cn = n;
        while(cn > 0){
            x++;
            cn /= d[i];
        }
        long long val = x/q[i];
        if(mini == -1 || mini > val){
            mini = val;
        }
    }
    if(mini >= b)
        return true;
    return false;
}

int main()
{
    ifstream fin("gfact.in");
    ofstream fout("gfact.out");

    long long p, b;
    fin >> p >> b;

    long long cp = p;
    long long div = 2;
    long long i = 0;
    while(div *div <= cp){
        if(cp % div == 0){
            long long putere = 0;
            while(cp % div == 0){
                putere++;
                cp/=div;
            }
            d[i] = div;
            q[i] = putere;
            i++;
        }
        div++;
    }
    if(cp != 1){
        d[i] = cp;
        q[i] = 1;
        i++;
    }

    long long nr_div = i;
    long long st = 0, dr = LLONG_MAX, rez = -1;
    while(st <= dr){
        long long mij = (st + dr) / 2;
        if(verif(mij, nr_div, b)){
            rez = mij;
            dr = mij - 1;
        }else{
            st = mij + 1;
        }
    }

    fout << rez;

    fin.close();
    fout.close();
    return 0;
}