Pagini recente » Cod sursa (job #1933699) | Cod sursa (job #2866737) | Cod sursa (job #1268893) | Cod sursa (job #2158035) | Cod sursa (job #1059602)
#include <fstream>
#include <vector>
#define in "frac.in"
#define out "frac.out"
#define Max_Size 1000000
#define LL long long
std :: ifstream f(in);
std :: ofstream g(out);
LL N , P;
std :: vector < LL > D;
inline void Descompose_N()
{
for(int i = 2; i * i <= N; ++i)
if(!( N % i ))
{
D.push_back(i);
while (!(N % i)) N /= i;
}
if(N > 1) D.push_back(N);
}
inline void Solve()
{
LL st = 1, dr = (LL)1 << 61, mij, sum;
while(st <= dr)
{
sum = mij = (st + dr) >> 1;
for(LL i = 1; i < (1 << D.size()); ++i)
{
LL prod = 1;
for(LL j = 0; j < D.size(); ++j)
if(i & (1 << j)) prod *= -D[j];
sum += mij / prod;
}
if(sum >= P) dr = mij - 1;
else st = mij + 1;
}
g << st << '\n';
}
int main()
{
f >> N >> P;
Descompose_N();
Solve();
g.close();
return 0;
}