Pagini recente » Cod sursa (job #3173486) | Cod sursa (job #808787) | Cod sursa (job #313167) | Cod sursa (job #3185494) | Cod sursa (job #300221)
Cod sursa(job #300221)
#include <fstream>
using namespace std;
ifstream fin ("gfact.in");
ofstream fout ("gfact.out");
long D[1000],P,Q;
long put[1000],num;
long long rez;
void divizori()
{
if (P%2==0)
D[++num]=2;
while (P%2==0)
{
P/=2;
put[num]++;
}
for (int 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 max(int a,int b)
{
return a>b?a:b;
}
long cal(long a,long b)
{
if (a%b!=0)
return 0;
return 1+cal(a/b,b);
}
void solve()
{
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;
}