Pagini recente » Cod sursa (job #2387909) | Cod sursa (job #235822) | Cod sursa (job #3233998) | Cod sursa (job #2543481) | Cod sursa (job #3275013)
#include <fstream>
using namespace std;
ifstream fin("gfact.in");
ofstream fout("gfact.out");
const long long VMIN = 1;
const long long VMAX = 60000000000000LL;
const int NMAX = 10;
int dp[NMAX], pdp[NMAX], ndp, p, q;
void descompunere(int n){
int d = 2;
while(d * d <= n){
if(n % d == 0){
dp[ndp] = d;
while(n % d == 0){
pdp[ndp]++;
n /= d;
}
ndp++;
}
d++;
}
if(n != 1){
dp[ndp] = n;
pdp[ndp] = 1;
ndp++;
}
}
long long putere(long long n, int d){
long long ct = 0;
while(n >= d){
ct += n / d;
n /= d;
}
return ct;
}
bool se_divide(long long n){
for(int i = 0; i < ndp; i++){
if(putere(n, dp[i]) < pdp[i] * q){
return 0;
}
}
return 1;
}
long long cb(){
long long st = VMIN, dr = VMAX, rez = VMAX + 1;
while(st <= dr){
long long m = (st + dr) / 2;
if(se_divide(m)){
rez = m;
dr = m - 1;
} else {
st = m + 1;
}
}
return rez;
}
int main(){
fin >> p >> q;
descompunere(p);
fout << cb();
fin.close();
fout.close();
return 0;
}