Pagini recente » Cod sursa (job #484253) | Borderou de evaluare (job #2205390) | Cod sursa (job #1395751) | Cod sursa (job #166557) | Cod sursa (job #3315751)
#include <stdio.h>
#include <stdlib.h>
long long fact[100], puteri[100];
long long factG(long long a, long long b){
long long cnt;
cnt = 0;
while(a > 0){
cnt += a / b;
a /= b;
}
return cnt;
}
long long caut_bin(long long n){
long long st, dr, mij, rez, i;
st = 0;
dr = (1LL << 40);
while(st <= dr){
mij = (st + dr) / 2;
i = 0;
while(i < n && factG(mij, fact[i]) >= puteri[i]){
i ++;
}
if(i >= n){
rez = mij;
dr = mij - 1;
}else{
st = mij + 1;
}
}
return rez;
}
int main()
{
FILE *fin, *fout;
fin = fopen("gfact.in", "r");
fout = fopen("gfact.out", "w");
long long p, q, d, ind;
fscanf(fin, "%lld%lld", &p, &q);
ind = 0;
d = 2;
while(d * d <= p){
if(p % d == 0){
fact[ind] = d;
while(p % d == 0){
p = p / d;
puteri[ind] ++;
}
puteri[ind] *= q;
ind ++;
}
d ++;
}
if(p > 1){
fact[ind] = p;
puteri[ind] = q;
ind ++;
p = 1;
}
fprintf(fout, "%lld\n", caut_bin(ind));
return 0;
}