Pagini recente » Cod sursa (job #1954926) | Cod sursa (job #1457676) | Cod sursa (job #2365393) | Cod sursa (job #968787) | Cod sursa (job #300229)
Cod sursa(job #300229)
#include <fstream>
using namespace std;
ifstream fin ("gfact.in");
ofstream fout ("gfact.out");
long long D[10000],P,Q;
long long put[10000],num;
long long rez;
void divizori()
{
if (P%2==0)
D[++num]=2;
while (P%2==0)
{
P/=2;
put[num]++;
}
for (long i=3;i<=P/i;i+=2)
{
if (P%i==0)
D[++num]=i;
while (P%i==0)
{
P/=i;
put[num]++;
}
}
if (P!=1)
{
D[++num]=P;
put[num]=1;
}
}
long long max(long long a,long long b)
{
return a>b?a:b;
}
long long cal(long long a,long long b)
{
int n=0;
while (a%b==0)
{
a/=b;
n++;
}
return n;
}
void solve()
{
long long nr,numar;
for (int i=1;i<=num;i++)
{
nr=1;
numar=D[i];
while (nr<put[i])
{
numar+=D[i];
nr+=cal(numar,D[i]);
}
rez=max(rez,numar);
}
}
int main()
{
fin>>P>>Q;
divizori();
for (int i=1;i<=num;i++)
put[i]*=Q;
solve();
fout<<rez<<"\n";
return 0;
}