Pagini recente » Cod sursa (job #133952) | Cod sursa (job #2458238) | Cod sursa (job #2458239) | Cod sursa (job #543630) | Cod sursa (job #1471331)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("gfact.in");
ofstream fout("gfact.out");
const int NMAX=50005;
int p,q,primes[NMAX],fact[NMAX],expo[NMAX];
bitset<NMAX>viz;
int sol;
inline void Ciur()
{
int i;
long long j;
primes[++primes[0]]=2;
for (i=3;i<NMAX;i+=2)
if (!viz[i])
{
primes[++primes[0]]=i;
for (j=1LL*i*i;j<NMAX;j+=i) viz[j]=1;
}
}
int main()
{
int i,j,sq,cnt,aux,baux,kkt;
fin>>p>>q;
Ciur();sq=sqrt(p);
//descomp
for (i=1;i<=primes[0] && p>1 && primes[i]<=sq;i++)
{
cnt=0;
while (p%primes[i]==0) cnt++;
if (cnt>0)
{
fact[++fact[0]]=primes[i];
expo[++expo[0]]=cnt;
}
}
if (p>1)
{
fact[++fact[0]]=p;
expo[++expo[0]]=1;
}
for (i=1;i<=fact[0];i++)
{
aux=q*expo[i];baux=fact[i];
cnt=0;
for (j=1;cnt<aux;j++)
{
kkt=j;cnt++;
while (kkt%baux==0)
{
kkt/=baux;
cnt++;
}
}
j--;
sol=max(sol,fact[i]*j);
}
fout<<sol<<"\n";
return 0;
}