阶 和 原根

\(b\) 为满足 \(a^b\equiv 1\pmod p\) 的最小值,则 \(b\)\(a\)\(p\) 的阶,记为 \(\text{ord}_p(a)\)\(\delta_p(a)\),阶一定存在

性质 1

\([a^i\bmod p\mid 1\le i\le\delta_p(a)]\) 两两不同

性质 2

\(a^n\equiv 1\pmod p\),则 \(\delta_p(a)\mid p\)

推论

\(a^x\equiv a^y\pmod p\),则 \(x\equiv y\pmod{\delta_p(a)}\)

性质 3

\(p\in \Bbb N^+,\,a,b\in\Bbb Z,\,a\bot p,\,b\bot p\),则 \(\delta_p(ab)=\delta_p(a)\delta_p(b)\iff \delta_p(a)\bot\delta_p(b)\)

性质 4

\(k\in\Bbb N,p\in\Bbb N^+,a\in\Bbb Z,a\bot p\),则 \(\delta_p(a^k)=\frac{\delta_p(a)}{\gcd(\delta_p(a),k)}\)

原根定义

\(a\bot p\),且 \(\delta_p(a)=\varphi(p)\),则 \(a\) 为模 \(p\) 意义下的原根

原根判定定理

\(a\bot p\),则 \(a\) 为模 \(p\) 意义下的原根当且仅当 \(\forall q\mid \varphi(p),q\in\mathbb P,(a^{\frac{\varphi(p)}q}\not\equiv 1\pmod p)\)

原根存在定理

\(p\) 存在原根当且仅当 \(p\in\{2,4,q^k,2q^k\}\;(q\in\mathbb P,q\ne 2,k\in\Bbb N^+)\)

原根个数

\(p\) 有原根,则其原根数量为 \(\varphi(\varphi(p))\)

最小原根的范围估计

素数 \(p\) 的最小原根 \(g_p=O(p^{0.25+\varepsilon})\),且 \(g_p=\Omega(\log p)\)

找出所有原根

先判断是否存在,再暴力找到最小的原根 \(g_p\),然后暴力枚举 \(k\),若 \(\varphi(p)\bot k\),则 \(g_p^k\) 为原根

模板题:P6091 【模板】原根

int fpw(int a, int b, int M){int ret = 1;for (; b; b >>= 1, a = 1ll * a * a % M)if (b & 1)ret = 1ll * ret * a % M;return ret;}
int phi(int a){
	int ret = a;
	for (int i = 2; i * i <= a; ++i)
		if (a % i == 0){while (a % i == 0)a /= i;ret = ret / i * (i - 1); }
	if (a > 1)ret = ret / a * (a - 1);return ret;
}
void sol(vector<int> &ret, int n){//ret 保存了 n 的所有原根
	if (n == 2){ret = {1};return ;}
	int ph = phi(n), t = ph;
	vector<int> P;
	for (int i = 2; i * i <= ph; ++i)
		if (ph % i == 0){
			P.emplace_back(t / i);
			while (ph % i == 0)ph /= i;
		}
	if (ph > 1)P.emplace_back(t / ph);
	int G = 0;
	for (int g = 1; g < n; ++g){
		if (__gcd(g, n) != 1)continue;
		bool fl = 1;
		for (int p : P)
			if (fpw(g, p, n) == 1){fl = 0;break;}
		if (fl){G = g;break;}
	}
	if (G)
		for (int i = 1, T = 1; i < t; ++i){
			T = 1ll * T * G % n;
			if (__gcd(i, t) == 1)ret.emplace_back(T);
		}
	sort(ret.begin(), ret.end());
}

例:[ABC212G] Power Pair

给定 \(p\),求 \(\sum_{x=0}^{p-1}\sum_{y=0}^{p-1}[\exists n\in\Bbb N,x^n\equiv y\pmod p]\) 取模,\(p\le10^{12},p\in\mathbb P\)

\(x=0\),则 \(y=0\);反之若 \(y=0\),则 \(x=0\)

因此答案为 \(1+\sum_{x=1}^{p-1}\sum_{y=1}^{p-1}[\exists n\in\Bbb N,x^n\equiv y\pmod p]\)

\(p\) 的某一原根为 \(g\),则 \(x\) 可以表示为 \(g^a\)\(y\) 可以表示为 \(g^b\)(其中 \(1\le a,b\le p-1\)),则 \(x^n\equiv y\pmod p\iff na\equiv b\pmod{(p-1)}\)

根据裴蜀定理,\([\exists n\in\Bbb N,na\equiv b\pmod{(p-1)}]=[\gcd(p-1,a)\mid b]\)

因此答案为:

\[\def\L{\left}\def\R{\right}\def\Lf{\lfloor}\def\Rf{\rfloor} {\begin{aligned} &1+\sum_{a=1}^{p-1}\sum_{\gcd(p-1,a)\mid b}1\\ =&1+\sum_{a=1}^{p-1}\frac{p-1}{\gcd(p-1,a)}\\ =&1+\sum_{a=1}^{p-1}\sum_{d\mid (p-1)}\L[\gcd(p-1,a)=d\R]\frac{p-1}d\\ =&1+\sum_{d\mid (p-1)}\frac{p-1}d\sum_{a=1}^{p-1}\L[\gcd(p-1,a)=d\R]\\ =&1+\sum_{d\mid (p-1)}\frac{p-1}d\sum_{d\mid a}\L[\gcd\L(\frac{p-1}d,\frac ad\R)=1\R]\\ =&1+\sum_{d\mid (p-1)}\frac{p-1}d\sum_{a}\L[\gcd\L(\frac{p-1}d, a\R)=1\R]\\ =&1+\sum_{d\mid (p-1)}\frac{p-1}d\varphi\L(\frac{p-1}d\R)\\ =&1+\sum_{d\mid (p-1)}d\varphi(d)\\ \end{aligned}}\]

直接计算即可

时间复杂度为 \(O(n^{\varepsilon}\sqrt n)=O(n^{0.5+\varepsilon})\)

代码

参考

  1. \(\text{12.11 math1.pdf \; \;by Tx\_Lcy}\)
posted @ 2025-04-06 19:10  Hstry  阅读(13)  评论(0)    收藏  举报