Pagini recente » Cod sursa (job #85595) | Cod sursa (job #1111340) | Cod sursa (job #734232) | Cod sursa (job #1750491) | Cod sursa (job #397790)
Cod sursa(job #397790)
#include <cstdio>
const int NMax = 1 << 30;
int A, Q;
int minim (int a, int b) {
return a < b ? a : b;
}
bool rau (int p1, int p2) {
return p2 * Q > p1;
}
int put (int n, int p) {
int rez = 0;
while (n) {
rez += n / p;
n /= p;
}
return rez;
}
bool desc (int x,int a) {
int p1, p2;
for (int i = 2; i * i <= a; ++i) {
if (!(a % i)) {
p1 = put (x, i);
p2 = 0;
while (!(a % i)) {
++p2;
a /= i;
}
if(rau(p1,p2))
return false;
}
}
if (a != 1) {
p1 = put (x,a);
p2 = 1;
if(rau(p1,p2))
return false;
}
return true;
}
int BS () {
int i, pas = 1 << 30;
for (i = 0; pas; pas >>= 1) {
if (!desc(i + pas,A)) {
i += pas;
}
}
return i + 1;
}
int main () {
freopen ("gfact.in", "r", stdin);
freopen ("gfact.out", "w", stdout);
scanf ("%d%d", &A, &Q);
printf ("%d", BS ());
return 0;
}