Pagini recente » Cod sursa (job #20957) | Cod sursa (job #1007518) | Cod sursa (job #1315241) | Cod sursa (job #1430391) | Cod sursa (job #670613)
Cod sursa(job #670613)
#include<iostream>
#include<fstream>
#include<cmath>
using namespace std;
int P,Q;
ifstream in("gfact.in");
ofstream out("gfact.out");
int get(int N, int prime){
int k=0;
int N1=N;
while(N){
k+=N/prime;
N/=prime;
}
cout << ">>>>>" << N1 << " " << prime << " " << k<<endl;
return k;
}
int main()
{
in >> P >> Q;
int prime=0;
int lastprime;
int lastsum;
int P1=P;
for(int i = 2; i <= sqrt(P); i++){
if(P1%i==0){
lastsum=0;
prime=1;
lastprime=i;
while(P1%i==0){P1/=i;lastsum++;}
}
}
if(!prime){lastprime=P;lastsum=1;}
cout << lastprime << " " << lastsum << endl;
lastsum*=Q;
int start=0;
int end=2000000000;
while(start<end){
int mid=start+(end-start)/2;
int nr = get(mid, lastprime);
if(nr==lastsum){
start=end=mid;
break;
}
if(nr>lastsum){
end=mid;
}else{
start=mid+1;
}
}
while(get(start,lastprime)==lastsum)start--;
out << (start+1) << endl;
return 0;
}