Pagini recente » Cod sursa (job #2064665) | Cod sursa (job #2280621) | Cod sursa (job #2091007) | Cod sursa (job #261841) | Cod sursa (job #361868)
Cod sursa(job #361868)
#include<fstream>
using namespace std;
ifstream f1 ("gfact.in");
ofstream f2 ("gfact.out");
int p,q,nr;
int t[10], pt[50];
long long b[10];
void desc()
{
int i;
nr=1;
for (i=2; i*i<=p; i++)
{
while (p%i==0) {pt[nr]++; p/=i;}
if (pt[nr]!=0) {t[nr]=i; nr++;}
}
if (p!=1) {pt[nr]=1; t[nr]=p;}
else nr--;
}
int calc(int k, int poz)
{
int x=k*t[poz];
int putere=k;
int v=t[poz];
int r=k;
while (r) {v*=t[poz]; r=x/v; putere+=r;}
//f2<<k<<" "<<poz<<" "<<x<<" "<<putere<<endl;
if (putere>=pt[poz]) return 1;
return 0;
}
int main()
{
f1>>p>>q;
int i,j,step;
desc();
for (i=1; i<=nr; i++) pt[i]*=q;
for (i=1; i<=nr; i++)
{
for (step=1; step<=pt[i]; step<<=1);
for (j=step; step; step>>=1)
{
if (j>step && calc(j-step,i)) j-=step;
}
b[i]=j*t[i];
}
int sol=b[1];
for (i=1; i<=nr; i++) if (b[i]>sol) sol=b[i];
f2<<sol;
return 0;
}