Pagini recente » Cod sursa (job #1641026) | Cod sursa (job #420952) | Cod sursa (job #159125) | Cod sursa (job #392108) | Cod sursa (job #2539755)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("gfact.in");
ofstream fout("gfact.out");
bool f(int n, int p, int q)
{
int d,i;
int freq[44723];
for(i=1;i<=44722;i++)
freq[i]=0;
int divprim=0;
int 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()
{
unsigned int step,pos,cpp,cpq;
fin >> cpp >> cpq;
pos=1<<31;
step=1<<31;
while(step>0)
{
if(f((pos-step),cpp,cpq)==1)
{
pos-=step;
}
step/=2;
}
if(cpp==1)
fout << 1;
else
fout << pos;
return 0;
}