Pagini recente » Cod sursa (job #1298558) | Cod sursa (job #484782) | Cod sursa (job #798759) | Cod sursa (job #1397844) | Cod sursa (job #307907)
Cod sursa(job #307907)
#include<stdio.h>
#include<math.h>
#include<string>
#include<vector>
using namespace std;
FILE*fin=fopen("gfact.in","r");
FILE*fout=fopen("gfact.out","w");
#define max(a,b)((a)>(b)?(a):(b))
vector<int> numar,putere;
int p,q;
int ok(int F,int ni,int pi)
{
int na=0,cp,nr;
for(cp=1,nr=ni;cp<=pi*q;cp++,nr*=ni)
{
na+=F/nr;
if(na>=pi*q) return 1;
}
return 0;
}
int main()
{
int ans=0,sqp,div,pwc,i,ni,pi,st,dr,mij;
fscanf(fin,"%d%d",&p,&q);
sqp=(int)sqrt(p);
for(div=2;div<=sqp,p>1;div++)
if(p%div==0)
{
pwc=0;
while(p%div==0&&p>1)
{
pwc++;
p/=div;
}
numar.push_back(div);
putere.push_back(pwc);
}
for(i=0;i<numar.size();i++)
{
ni=numar[i];
pi=putere[i];
st=1;dr=2000000000;
while(st<dr)
{
mij=(st+dr)/2;
if(ok(mij,ni,pi)) dr=mij;
else st=mij+1;
}
ans=max(ans,st);
}
fprintf(fout,"%d",ans);
fclose(fin);
fclose(fout);
return 0;
}