Pagini recente » Cod sursa (job #1929697) | Cod sursa (job #2628669) | Cod sursa (job #1892383) | Cod sursa (job #1902472) | Cod sursa (job #2872733)
#include <fstream>
#define int long long
#define NMAX 30000
using namespace std;
int exp[NMAX + 1];
int divp[NMAX + 1];
int nrofd;
int q;
/*int lgput (int x, int n){
int p = 1;
while (n){
if (n&1) p = (p * x) % MOD;
x = (x * x) % MOD;
n /= 2;
}
return p;
}*/
void desc (int x){ /// E BINE
int d = 2;
while (d * d <= x){
if (x % d == 0){
divp[nrofd] = d;
while (x % d == 0)
exp[nrofd] ++, x /= d;
nrofd++;
}
d ++;
}
if (x > 1){
divp[nrofd] = x;
exp[nrofd] = 1;
nrofd ++;
}
}
int legendre (int n, int d){ /// E BINE
int tau = 0;
while (n >= d)
tau += n / d, n /= d;
return tau;
}
bool verificare (int n){
for (int i = 0; i < nrofd; i++){
if (legendre (n, divp[i]) < exp[i] * q)
return 0;
}
return 1;
}
signed main(){
ifstream fin ("gfact.in");
ofstream fout ("gfact.out");
int p;
fin >> p >> q;
desc (p);
int st = 0, pas = 1LL << 61;
while (pas > 0){
if (!verificare (st + pas)) // nu am border
st += pas;
pas /= 2;
}
fout << st + 1;
return 0;
}