This documentation is automatically generated by online-judge-tools/verification-helper
View the Project on GitHub AlexanderNekrasov/Youthful-Passion-Fruit-teambook
/**
* Author: Iurii Pustovalov
* Date: 2024-09-09
* Description: Discrete log
* Time: O(\sqrt(n))
*/
ll modLog(ll a, ll b, ll m) {
ll n = (ll)sqrt(m) + 1, e = 1, f = 1, j = 1;
unordered_map<ll, ll> A;
while (j <= n && (e = f = e * a % m) != b % m) A[e * b % m] = j++;
if (e == b % m) return j;
if (__gcd(m, e) == __gcd(m, b))
for (int i = 2; i < n + 2; ++i)
if (A.count(e = e * f % m)) return n * i - A[e];
return -1;
#line 1 "math/DiscreteLog.cpp"
/**
* Author: Iurii Pustovalov
* Date: 2024-09-09
* Description: Discrete log
* Time: O(\sqrt(n))
*/
ll modLog(ll a, ll b, ll m) {
ll n = (ll)sqrt(m) + 1, e = 1, f = 1, j = 1;
unordered_map<ll, ll> A;
while (j <= n && (e = f = e * a % m) != b % m) A[e * b % m] = j++;
if (e == b % m) return j;
if (__gcd(m, e) == __gcd(m, b))
for (int i = 2; i < n + 2; ++i)
if (A.count(e = e * f % m)) return n * i - A[e];
return -1;