Pagini recente » Cod sursa (job #1532854) | Cod sursa (job #2190914) | Clasament dupa rating | Diferente pentru warm-up-2019/solutii/shoturi intre reviziile 63 si 62 | Cod sursa (job #3032743)
#include <fstream>
#define int int64_t
using namespace std;
ifstream cin ("frac.in");
ofstream cout ("frac.out");
int cmmdc (int a, int b)
{
while (b > 0)
{
int r = a % b;
a = b;
b = r;
}
return a;
}
int phi (int n)
{
int result = n;
for (int p = 2; p * p <= n; ++p)
{
if (n % p == 0)
{
while (n % p == 0)
n /= p;
result -= result / p;
}
}
if (n > 1)
result -= result / n;
return result;
}
int32_t main()
{
int n, p; cin >> n >> p;
int nr = 0, pos = 0, q = phi(n);
while (pos + q < p)
{
nr += n;
pos += q;
}
//cout << nr << " " << pos << '\n';
while (pos < p)
{
nr ++;
if (cmmdc(nr, n) == 1)
{
pos ++;
}
}
cout << nr << '\n';
}