Pagini recente » Cod sursa (job #2913021) | Cod sursa (job #1973750) | Cod sursa (job #1259359) | Cod sursa (job #3193853) | Cod sursa (job #1714042)
#include <fstream>
#include <iostream>
using namespace std;
ifstream in("gfact.in");
ofstream out("gfact.out");
long long pas=1<<30,p,q,m=1;
long long fact[30],put[30];
long long putere(long long n,long long d)
{
long long ptr=0;
while(n>=d)
{
ptr+=n/d;
n/=d;
}
return ptr;
}
bool sepoate(long long n)
{
int i;
for(i=1;i<m;++i)
if(putere(n,fact[i])<put[i]*q)
return false;
return true;
}
int main()
{
long long i=0,cop,aaa;
long long j=0,fmax=-1;
register long long d=2;
in >> p >> q;
cop=p;
for(; d*d<=cop; ++d)
while(cop%d==0)
{
cop/=d;
fact[m]=d;
put[m]++;
m++;
}
if(cop>1)
{
fact[m]=cop;
put[m]++;
++m;
}
while(pas)
{
if(!sepoate(j+pas))
j+=pas;
pas/=2;
}
out << j+1;
return 0;
}