Pagini recente » Cod sursa (job #2444756) | Cod sursa (job #1162934) | Cod sursa (job #2625062) | Cod sursa (job #3237975) | Cod sursa (job #2088725)
#include <fstream>
using namespace std;
ifstream in("gfact.in");
ofstream out("gfact.out");
const int L=45;
int p,q,nd,d[20],e[20];
long long putere(long long n, int d)
{
long long nr=0;
//out << n << "! are ";
while(n>=d) nr += (n/=d);
//out << nr << d << "-uri\n";
return nr;
}
bool sedivide(long long n)
{
//out << "nd = " << nd << "\n";
for(int i=1; i<=nd; i++)
{
if(putere(n,d[i]) < e[i]*q)
return false;
}
return true;
}
int main()
{
in>>p>>q;
int i=2;
while(i*i<=p)
{
if(p%i==0)
{
d[++nd]=i;
while(p%i==0)
{
e[nd]++;
p/=i;
}
}
i++;
}
if(p!=1)
{
d[++nd]=p;
e[nd]=1;
}
/*
for (int i = 1; i <= nd; i++)
{
out << d[i] << "^" << e[i] << " ";
}
*/
long long r=0,pas=1LL<<L;
while(pas!=0)
{
if(!sedivide(r+pas))
{
r+=pas;
}
pas/=2;
}
r++;
out<<r;
return 0;
}