| 243 | } |
| 244 | |
| 245 | bool is_primitive_root(int m, int g) { |
| 246 | assert(1 <= g && g < m); |
| 247 | auto prs = factors(m - 1); |
| 248 | for (int x : factors(m - 1)) { |
| 249 | if (internal::pow_mod_constexpr(g, (m - 1) / x, m) == 1) return false; |
| 250 | } |
| 251 | return true; |
| 252 | } |
| 253 | |
| 254 | bool is_primitive_root_naive(int m, int g) { |
| 255 | assert(1 <= g && g < m); |
no test coverage detected