Pagini recente » Cod sursa (job #2355300) | Cod sursa (job #1906168) | Cod sursa (job #2817875) | Cod sursa (job #2260300) | Cod sursa (job #1714047)
#include <fstream>
#include <iostream>
using namespace std;
ifstream in("gfact.in");
ofstream out("gfact.out");
long long pas=1LL<<50,p,q,m=0;
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)
{
long long 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;
long long j=0;
register long long d=2;
in >> p >> q;
cop=p;
for(;d*d<=cop; ++d)
{
if(cop%d==0) ++m;
while(cop%d==0)
{
cop/=d;
fact[m]=d;
put[m]++;
}
}
if(cop>1)
{
++m;
fact[m]=cop;
put[m]++;
}
while(pas)
{
if(!sepoate(j+pas))
j+=pas;
pas/=2;
}
out << j+1;
return 0;
}