Pagini recente » Cod sursa (job #3150835) | Cod sursa (job #1836036) | Cod sursa (job #3140288) | Cod sursa (job #2106151) | Cod sursa (job #304154)
Cod sursa(job #304154)
#include <cstdio>
#define MAX_N 100
int P, Q, K;
int T[MAX_N], R[MAX_N], Sol;
inline int max(const int &a, const int &b)
{
return ((a) > (b))? (a) : (b);
}
void desc(int x)
{
for(int i = 2; i*i <= x; ++i)
if(x % i == 0)
{
T[++K] = i;
int p = 0;
while(x % i == 0)
x /= i,
++p;
R[K] = p;
}
if(x) T[++K] = x, R[K] = 1;
for(int i = 1; i <= K; ++i)
R[i] *= Q;
}
int des(long long B, int T)
{
int Sol = 0;
while(B)
{
Sol += B / T;
B /= T;
}
return Sol;
}
void solve()
{
long long logN;
for(logN = 1; logN <= (long long)P*Q; logN <<= 1);
for(int j = 1; j <= K; ++j)
{
long long i, lg;
for(i = (long long)P*Q, lg = logN; lg; lg >>= 1)
if(i - lg > 0 && des((i - lg) * T[j], T[j]) >= R[j])
i -= lg;
Sol = max(Sol, (i - lg) * T[j]);
}
printf("%d\n",Sol);
}
int main()
{
freopen("gfact.in","rt",stdin);
freopen("gfact.out","wt",stdout);
scanf("%d %d", &P, &Q);
desc(P);
solve();
}