Pagini recente » Cod sursa (job #277651) | Cod sursa (job #921762) | Cod sursa (job #479107) | Borderou de evaluare (job #2267939) | Cod sursa (job #2539763)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin ("gfact.in");
ofstream fout("gfact.out");
bool f( long long n, long long p, long long q)
{
long long d,i;
long long freq[44723];
for(i=1;i<=44722;i++)
freq[i]=0;
long long divprim=0;
long long cp,cpn;
cp=p;
while(p%2==0)
{
p/=2;
freq[2]++;
}
freq[2]*=q;
d=3;
while(d<=44722 && p>1)
{
// cout << 1;
while(p%d==0)
{
p/=d;
freq[d]++;
}
freq[d]*=q;
d+=2;
}
if(p>1)
divprim=p;
for(i=2;i<=44722;i++)
{
cpn=n;
while(cpn>0 && freq[i]>0)
{
freq[i]-=(cpn/i);
cpn/=i;
}
if(freq[i]>0)
return 0;
}
cpn=n;
if(divprim>0)
{
while(cpn>0)
{
q-=(cpn/divprim);
cpn/=divprim;
}
if(q>0)
return 0;
}
return 1;
}
int main()
{
long long step,pos,cpp,cpq;
fin >> cpp >> cpq;
pos=pow(2,62);
step=pow(2,62);
while(step>0)
{
if(f((pos-step),cpp,cpq)==1)
pos-=step;
step/=2;
}
if(cpp==1)
fout << 1;
else
fout << pos;
return 0;
}