Pagini recente » Cod sursa (job #2515043) | pregatire_oji_2022 | Statistici Dumitra Andrei 322CC (dumandga) | Cod sursa (job #2016668) | Cod sursa (job #479318)
Cod sursa(job #479318)
# include <fstream>
# include <cstdio>
# define LL long long
using namespace std;
LL P, Q, desc[100], cnt, du, d, ap[100], i, de[100], ap2[100], cnt2;
LL des (LL P, LL desc[], LL ap[]){
du=P;
cnt=0;
if (du%2==0){
desc[++cnt]=2;
while (du%2==0){
++ap[cnt];
du>>=1;
}
}
d=3;
while (du>1){
if (du%d==0){
desc[++cnt]=d;
while (du%d==0){
++ap[cnt];
du=du/d;
}
}
d=d+2;
}
}
LL corect (LL nr){
//vezi de cate ori apare fiecare component in desc lui nr prin impartire
//ok, let's start ...
LL i, aux, d;
for (i=1;i<=cnt;++i){
aux=0;
d=nr;
while (d%desc[i]==0){
d=d/desc[i];
aux+=d;
}
if (aux<ap[i]) return 0;
}
return 1;// :O
}
LL cb (LL in, LL sf){
LL ret;
while (in<=sf){
int m= (in+sf) >> 1;
if (corect (m)){//search down
ret=m;
sf=m-1;
}
else in=m+1;//else up
}
return ret;
}
int main (){
ifstream f ("gfact.in");
freopen ("gfact.out", "w", stdout);
f>>P>>Q;
des (P, desc, ap);
for (i=1;i<=cnt;++i) ap[i]=ap[i]*Q;
printf ("%lld\n", cb (1, P*Q));
return 0;
}