Pagini recente » Cod sursa (job #1316290) | Cod sursa (job #2408213) | Cod sursa (job #2459107) | Cod sursa (job #1863322) | Cod sursa (job #913266)
Cod sursa(job #913266)
#include <fstream>
using namespace std;
ifstream in("gfact.in");
ofstream out("gfact.out");
long long p,q,baz[100],exp[100],num=0;
void desc(long long n){
long long i=2,k;
while(i*i<=n){
if(n%i==0){
k=0;
while(n%i==0){
n/=i;
k++;
}
baz[++num]=i;
exp[num]=k;
}
i++;
}
if(n!=1){
baz[++num]=n;
exp[num]=1;
}
}
long long verif(long long n){
long long i,e,sediv=1,aux;
for(i=1;i<=num;i++){
aux=n;
e=0;
while(aux>=baz[i]){
e+=aux/baz[i];
aux/=baz[i];
}
if(e<exp[i]) sediv=0;
}
return sediv;
}
long long caut(){
long long i=0, pas=(1LL)<<60;
while(pas!=0){
if(verif(i+pas)==0) i+=pas;
pas>>=1;
}
return 1+i;
}
int main(){
long long i;
in>>p>>q;
desc(p);
for(i=1;i<=num;i++) exp[i]*=q;
out<<caut();
return 0;
}