Pagini recente » Cod sursa (job #1733828) | doargrafuri | Cod sursa (job #1825879) | Cod sursa (job #2334391) | Cod sursa (job #1453140)
#include <fstream>
#define goprox unsigned long long
#define limd 32
using namespace std;
ifstream in ("gfact.in");
ofstream out ("gfact.out");
struct factor{
goprox up, Div;
};
goprox a, b, d, NM;
factor dp[limd];
bool ok (goprox mid){
for (int k = 1; k <= (int)NM; k++){
goprox aux = dp[k].Div, Ress = 0;
while (mid / aux > 0LL)
Ress += mid / aux, aux *= dp[k].Div;
if (Ress < dp[k].up)
return 0;
}
return 1;
}
int main(){
in >> a >> b;
for (d = 2 ; d * d <= a; ++ d ) {
if (a % d)
continue;
int per = 0;
while (a % d == 0) ++ per, a /= d;
dp[++NM].up = per * b, dp[NM].Div = d;
}
if (a > 1)
dp[++ NM].up = b, dp[NM].Div = a;
goprox st = 1 , dr = (1LL * 1 << 60), godd;
while (st <= dr){
goprox mid = (st + dr) >> 1;
if (ok(mid)) godd = mid, dr = mid - 1;
else st = mid + 1;
}
out << godd;
return 0;
}