Pagini recente » Cod sursa (job #2288467) | Cod sursa (job #2385829) | Cod sursa (job #2958281) | Cod sursa (job #564498) | Cod sursa (job #1636477)
#include <fstream>
#define INF 5000000000
#define NMAX 50
using namespace std;
ifstream f("gfact.in");
ofstream g("gfact.out");
long long v[NMAX] , nr[NMAX];
long long p , q , n;
void desc(long long x);
long long verif(long long x);
long long caut_bin();
int main() {
f >> p >> q;
desc(p);
g << caut_bin();
return 0;
}
void desc(long long x) {
long long d = 2;
while(x != 1 && d < x) {
if(x % d == 0) {
v[++n] = d;
while(x % d == 0) {
++nr[n];
x /= d;
}
nr[n] *= q;
}
++d;
}
if(x != 1) {
v[++n] = x;
nr[n] = q;
}
}
long long caut_bin() {
long long i , p = 0;
for(i = 1 ; i <= INF ; i <<= 1);
while(i) {
if(verif(i + p) == 0) {
p += i;
}
i >>= 1;
}
return p + 1;
}
long long verif(long long x) {
for(int i = 1 ; i <= n ; ++i) {
long long p = v[i] , aux = 0;
while(p <= x) {
aux += x / p;
p *= v[i];
}
if(aux < nr[i]) {
return 0;
}
}
return 1;
}