Pagini recente » Cod sursa (job #3153071) | Cod sursa (job #3265092) | Cod sursa (job #2274732) | Cod sursa (job #817027) | Cod sursa (job #2832719)
#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;
}