Pagini recente » Cod sursa (job #280652) | Cod sursa (job #2542338) | Cod sursa (job #2533660) | Cod sursa (job #658411) | Cod sursa (job #2285608)
#include <fstream>
#include<cmath>
using namespace std;
ifstream cin("gfact.in");
ofstream cout("gfact.out");
const int L=20;
int div[10],putere[10],nd,p,q;
void descompunere(int n)
{
int dv = 2;
while (dv * dv <= n)
{
if (n % dv == 0)
{
div[nd] = dv;
while (n % dv == 0)
{
putere[nd]++;
n /= dv;
}
nd++;
}
dv++;
}
if (n > 1)
{
div[nd] = n;
putere[nd++] = 1;
}
}
/*int divmax(long long n){
int k=0;
if(sqrt(n)-int(sqrt(n))!=0){
int i=int(sqrt(n))+1;
while(k==0){
if(n%i==0){
k=i;
}
i++;
}
}
else{
k=sqrt(n);
}
return k;
//cout<<k;
}*/
long long nrp(long long n, int p)
{
long long nr=0;
while (n>=p)
{
nr+=n/p;
n/=p;
}
return nr;
}
bool df(long long n)
{
for (int i=0; i<nd; i++)
{
if (nrp(n,div[i])<putere[i] * q)
{
return 0;
}
}
return 1;
}
long long caut()
{
long long r = 0, pas = 1<< L;
while (pas != 0)
{
if (!df(r + pas))
{
r += pas;
}
pas /= 2;
}
return r+1;
}
int main()
{
cin>>p>>q;
descompunere(p);
cout<<caut();
}