func_code_string: #include <bits/stdc++.h>   using namespace std;   long long exp(long long a, long long b, long long p) {     if (b == 0) return 1;     if (b % 2) return a * exp(a, b - 1, p) % p;     return exp(a * a % p, b / 2, p);   }   long long inv[1000009], E[1000009];   int main() {     long long a, b, p, x;     cin >> a >> b >> p >> x;     vector<long long> v;     for (int i = 1; i <= p; i++) {       if ((p - 1) % i == 0) v.push_back(i);     }     long long on;     for (int j = 0; j < v.size(); j++) {       if (exp(a, v[j], p) == 1) {         on = v[j];         break;       }     }     for (int i = 1; i <= p; i++) {       inv[i] = exp(i, p - 2, p);     }     long long ans = 0;     for (int i = 1; i <= on; i++) {       long long E = exp(a, i, p);       long long N = inv[E] * b % p;       long long y = (N - i + p) * inv[on] % p;       long long m = i + y * on;       long long M = p * on;       if (x % M >= m)         ans += x / M + 1;       else         ans += x / M;     }     cout << ans << endl;   }   