Pagini recente » Cod sursa (job #2083909) | Cod sursa (job #1102503) | Cod sursa (job #2309038) | Cod sursa (job #2303057) | Cod sursa (job #1107971)
#include <cstdio>
using namespace std;
const int NMAX = 10010;
long long N, P, K, Div[NMAX];
bool Check(long long MaxNum)
{
long long Ans = 0;
for(long long Conf = 0; Conf < (1 << K); ++ Conf)
{
long long Prod = 1;
for(int i = 0; i < K; ++ i)
if(Conf & (1 << i))
Prod *= -Div[i];
Ans += MaxNum / Prod;
}
return Ans < P;
}
int main()
{
freopen("frac.in", "r", stdin);
freopen("frac.out", "w", stdout);
scanf("%lld %lld", &N, &P);
for(long long i = 2; i * i <= N; ++ i)
if(N % i == 0)
{
while(N % i == 0) N /= i;
Div[ K++ ] = i;
}
if(N > 1) Div[ K++ ] = N;
long long Ans = 0;
for(long long Step = 61; Step >= 0; Step --)
if(Check(Ans + Step))
Ans += Step;
printf("%lld\n", Ans + 1);
}