Pagini recente » Cod sursa (job #440003) | Cod sursa (job #1194583) | Cod sursa (job #962396) | Profil Betivuuu | Cod sursa (job #1942574)
#include <fstream>
#define VAL 44725
#define DIV 25
#define INF 2000000000
using namespace std;
ifstream fin("gfact.in");
ofstream fout("gfact.out");
int N, M, i, j, nr;
int prim[VAL], K, ans;
int d[DIV], e[DIV];
bool ok[VAL];
void Sieve()
{
for (i=2; i<=N; i++)
{
if (ok[i]==false)
{
prim[++K]=i;
for (j=i*i; j<=N; j+=i)
ok[j]=true;
}
}
}
bool Verify(int X, int D, int E)
{
long long sum=0;
while (X>0)
{
X/=D;
sum+=X;
}
return sum>=E;
}
int Binary_Search(int D, int E)
{
int be=1, en=INF;
int mid, ans;
while (be<=en)
{
mid=(be+en) / 2;
if (Verify(mid, D, E)==true)
{
ans=mid;
en=mid-1;
}
else
be=mid+1;
}
return ans;
}
int main()
{
fin >> N >> M;
Sieve();
for (i=1; i<=K; i++)
{
if (N % prim[i]==0)
{
d[++nr]=prim[i];
while (N % prim[i]==0)
{
N/=prim[i];
e[nr]++;
}
}
if (N==1)
break;
}
if (N>1)
{
d[++nr]=N;
e[nr]=1;
}
for (i=1; i<=nr; i++)
{
e[i]*=M;
ans=max(ans, Binary_Search(d[i], e[i]));
}
fout << ans << '\n';
fin.close();
fout.close();
return 0;
}