Pagini recente » Cod sursa (job #1742325) | Cod sursa (job #791540) | Cod sursa (job #1007624) | Cod sursa (job #1516331) | Cod sursa (job #2701080)
#include <fstream>
#include <climits>
#include <cmath>
#define NMAX 45000
using namespace std;
ifstream cin("gfact.in");
ofstream cout("gfact.out");
int ciur[NMAX],pp[NMAX],k;
int main(){
int p,q;
cin >> p >> q;
for(int i=3; i*i<=sqrt(p); i+=2){
if(ciur[i]==0){
for(int j=i*i; j*j<=p; j+=i){
ciur[j]=1;
}
}
}
pp[k++]=2;
for(int i=1;i*i<=p;i++){
if(ciur[i]){pp[k++]=i;}
}
int p1=p;
int desc_p[NMAX]={0},exp_p[NMAX]={0};
int h1=0;
for(int i=0;i<k ;i++){
int c=0;
while(p1%pp[i]==0){
c++;
p1/=pp[i];
}
desc_p[h1]=pp[i],exp_p[h1]=c,h1++;
}
if(p1>1){h1++;desc_p[h1]=p1,exp_p[h1]=1;}
int st=0,dr=INT_MAX,mid,mn;
mn=dr;
while( dr-st>1){
mid= (st+dr) /2; int mid1=mid,s=0,mnn=INT_MAX;
for(int i=0;i<h1;i++){
while(mid1>0){
mid1/=desc_p[i];
s+=mid1;
}
mnn=min(mnn,s/exp_p[i]);
}
if(mnn>=q){mn=min(mn,mid);dr=mid;}
else{st=mid;}
}
cout<<mn;
return 0;
}