Pagini recente » Cod sursa (job #2863301) | Rating Radu Paraschivescu (paraschivescu90) | Cod sursa (job #1631995) | Cod sursa (job #458583) | Cod sursa (job #2864698)
#include <fstream>
using ull = unsigned long long;
ull fi(ull);
ull putere_mod(ull, ull, ull);
int main() {
ull a, n;
std::ifstream fin("inversmodular.in");
fin >> a >> n;
fin.close();
std::ofstream fout("inversmodular.out");
fout << putere_mod(a, fi(n) - 1, n) << '\n';
fout.close();
return 0;
}
ull fi(ull x) {
ull ret = x, d;
for (d = 2; d * d <= x; ++d) {
if (x % d == 0) {
while (x % d == 0) x /= d;
ret = (ret / d) * (d - 1);
}
}
if (x != 1) ret = (ret / x) * (x - 1);
return ret;
}
ull putere_mod(ull b, ull p, ull m) {
if (p == 0) return 1;
if (p % 2 == 0) return putere_mod((b * b) % m, p / 2, m) % m;
return (b * putere_mod((b * b) % m, p / 2, m)) % m;
}