Nu exista pagina, dar poti sa o creezi ...
Cod sursa(job #1302814)
Utilizator | Data | 27 decembrie 2014 12:49:07 | |
---|---|---|---|
Problema | GFact | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.98 kb |
#include<fstream>
using namespace std;
long long p, q, a, i, st, dr, pp;
long long b, pt, mid, maxim, x;
ifstream fin("gfact.in");
ofstream fout("gfact.out");
int main(){
fin>> p >> q;
a = p;
for(i = 2; i * i <= p; i++){
pp = 0;
while(a % i == 0){
pp++;
a /= i;
}
pp *= q;
if(pp != 0){
st = 1;
dr = pp;
while(st <= dr){
mid = (st + dr) / 2;
b = mid * i;
pt = 0;
x = i;
while(x <= b){
pt += b / x;
x *= i;
}
if(pt >= pp){
dr = mid - 1;
}
else{
st = mid + 1;
}
}
if(st * i> maxim){
maxim = st * i;
}
}
}
if(a != 1){
pp = q;
st = 1;
dr = pp;
while(st <= dr){
mid = (st + dr) / 2;
b = mid * a;
pt = 0;
x = a;
while(x <= b){
pt += b / x;
x *= a;
}
if(pt >= pp){
dr = mid - 1;
}
else{
st = mid + 1;
}
}
if(st * a> maxim){
maxim = st * a;
}
}
fout<< maxim;
return 0;
}