首页 > 其他分享 >原根与 NTT

原根与 NTT

时间:2024-05-09 21:34:37浏览次数:8  
标签:原根 pmod NTT varphi delta ind equiv

阶与原根

若正整数 \(m, \ a\),满足 \((a, m) = 1\),则使 \(a^n\equiv 1 \pmod m\) 的最小正整数 \(n\) 称为 \(a\) 模 \(m\) 的阶,记作 \(\delta_m(a)\)。

\(\delta_7(1) = 1, \ \delta_7(2) = 3, \ \delta_7(3) = 6\)。

原根

若 \(\delta_m(a) = \varphi(m)\),则称 \(a\) 为 \(m\) 的一个原根。

欧拉定理:若 \((a, m) = 1\),则 \(a^{\varphi(m)}\equiv 1\pmod m\)。

阶的性质

假设 \((a, m) = 1, \ \delta = \delta_m(a)\),则

  1. \(a^0, a^1, \dots, a^{\delta - 1}\) 在模 \(m\) 意义下两两不同。

    证明:

    如果存在 \(a^x \equiv a^y \pmod m, \ x < y \le \delta - 1\)。

    则 \(a^{y - x} \equiv 1\),且 \(y - x < \delta\),与阶的最小性矛盾。

  2. \(a^{\gamma}\equiv a^{\gamma'} \pmod m \iff \gamma \equiv \gamma'\pmod \delta\)。

  3. \(\delta \mid \varphi(m)\)。

    证明:

    令 \(\varphi(m) = q\delta + r, \ (0 \le r < \delta)\)。

    如果 \(r > 0\),则 \(a^{q\delta + r} \equiv a^{r} \equiv a^{\varphi(m)}\equiv 1 \pmod m\),则有 \(r < \delta\),与 \(\delta_m(a) = \delta\) 矛盾。

    所以 \(r = 0\)。

  4. 设 \(m \in\mathbb{N^*}, \ a, b\in \mathbb{Z}, \ (a, m) = (b, m) = 1\),则

    \[\delta_m(ab) = \delta_m(a)\delta_m(b) \]

    的充要条件为 \((\delta_m(a), \delta_m(b)) = 1\)。

  5. 设 \(k\in \mathbb{N}, \ m \in \mathbb{N^*}, \ a\in \mathbb{Z}, \ (a, m) = 1\),则

    \[\delta_m(a^k) = \dfrac{\delta_m(a)}{(\delta_m(a), k)} \]

    证明:

    注意到:

    \[\begin{aligned} & a^{k\delta_m(a^k)}=(a^k)^{\delta_m(a^k)}\equiv 1 \pmod m \\ \implies & \delta_m(a)\mid k\delta_m(a^k) \\ \implies & \dfrac{\delta_m(a)}{\left(\delta_m(a),k\right)}\mid\delta_m(a^k) \end{aligned} \]

    另一方面,由 \(a^{\delta_m(a)}\equiv 1 \pmod m\),可知:

    \[(a^k)^{\frac{\delta_m(a)}{(\delta_m(a),k)}}=(a^{\delta_m(a)})^{\frac{k}{(\delta_m(a),k)}}\equiv 1 \pmod m \]

    故:

    \[\delta_m(a^k)\mid\dfrac{\delta_m(a)}{(\delta_m(a),k)} \]

    综合以上两点,得:

    \[\delta_m(a^k)=\dfrac{\delta_m(a)}{(\delta_m(a),k)} \]

原根的存在与判定

原根的存在定理

只有模 \(2,\ 4,\ p^a,\ 2p^a\) (\(p\) 是奇质数)存在原根。

原根的判定定理

设 \(m > 1\),\(g\) 为正整数且 \((g, m) = 1\)。则 \(g\) 是 \(m\) 的原根当且仅当对于任意 \(\varphi(m)\) 的质因子 \(q_i\),\(g^{\varphi(m)/q_i} \not\equiv 1 \pmod m\)。

证明:如果 \(\delta < \varphi(m)\) 且 \(\delta \mid \varphi(m)\),则一定存在一个 \(q_i\) 使得 \(\delta \mid\varphi(m) / q_i\)。

原根个数

若 \(m\) 有原根,则它原根的个数为 \(\varphi(\varphi(m))\)。

证明:

若 \(m\) 有原根 \(g\),则:

\[\delta_m(g^k)=\dfrac{\delta_m(g)}{\left(\delta_m(g),k\right)}=\dfrac{\varphi(m)}{\left(\varphi(m),k\right)} \]

所以若 \(\left(k,\varphi(m)\right)=1\),则有:\(\delta_m(g^k)=\varphi(m)\),即 \(g^k\) 也是模 \(m\) 的原根。

而满足 \(\left(\varphi(m),k\right)=1\) 且 \(1\leq k \leq \varphi(m)\) 的 \(k\) 有 \(\varphi(\varphi(m))\) 个。所以原根就有 \(\varphi(\varphi(m))\) 个。

P6091 【模板】原根submission

指标(离散对数)

定义

对于质数 \(p\),假设 \(g\) 是 \(p\) 的一个原根,则 \(g^0, \ g^1, \dots, g^{p - 2}\) 在模 \(p\) 意义下是 \(1, 2, \dots, p - 1\) 的一个排列。

假设对于 \(x \in [1, p)\) 有 \(g^c\equiv x \pmod p\),则称 \(x\) 的指标为 \(c\),记作 \(\operatorname{ind}(x) = c\)(或 \(\operatorname{ind}_g(x) = c\))。

性质

对于任意 \(x, y \in [1, p)\),存在

\[\begin{aligned} \operatorname{ind}(xy) &= \operatorname{ind}(x) + \operatorname{ind}(y)\pmod {\varphi(p)}\\ \\ \operatorname{ind}(x^c) &= c\operatorname{ind}(x)\pmod {\varphi(p)}\\ \end{aligned} \]

类似于实数运算中的对数,因此指标亦称离散对数。

baby step giant step (BSGS)

给定质数 \(p\),求最小满足 \(g^c \equiv x \pmod {p}\) 的非负整数 \(c\) 的值。

令 \(c = aB + b\),其中 \(B = \lceil\sqrt{p}\rceil\)。

因为 \(c < \varphi(p) = p - 1\),所以 \(a, \ b < B\)。

  1. BS:枚举 \(b = 0, \ 1, \ \dots, B - 1\),将 \(xg^{b}\) 计入哈希表。

  2. GS:枚举 \(a = 1, \ 2, \ \dots, B\),若存在 \(g^{aB} = xg^b\),则最小满足条件的 \(c = aB - b\)。

最小性证明:

对于 \(xg^b \bmod p\) 相同的 \(b\),大的会在哈希表中覆盖小的,从而使 \(aB - b\) 最小。

\(B > b\),所以 \(a\) 对答案的贡献大于 \(b\),从小到大枚举 \(a\) 使答案最小。

【模板】BSGS

例题

Discrete Roots

题意:给出两个质数 \(p, k\) 和一个整数 \(a\),求 \(x^k = a \pmod p\) 的所有解。

\[\begin{aligned} &\operatorname{ind}(x^k) = k\operatorname{ind}(x) = \operatorname{ind}(a) \pmod{\varphi(p)}\\ \\ &k\operatorname{ind}(x) \equiv\operatorname{ind}(a)\pmod{\varphi(p)}\\ \\ &x \equiv g^{\operatorname{ind}(x)} \pmod p \end{aligned} \]

所以只需处理 \(p\) 的原根以及 \(a\) 的指标,中间的同余方程可用 exgcd 求解。

特判 \(a = 0\) 的情况。

submission

快速数论数论变换(NTT)

即把 FFT 中 \(\mathbb{C}\) 上的运算变成 \(\mathbb{Z}_p\) 上的运算。

  • 假设素数 \(p\) 满足 \(p = r2^l + 1\),\(g\) 是 \(p\) 的原根。

  • 用 \(g_n = g^{\frac{p - 1}{n}}\) 替代 \(\omega_n\)。

  • \(g_{2n}^{2k} \equiv g_n^k \pmod p, \ (2n < 2^l)\)。

  • \(g_{2n}^{n} \equiv -1 \pmod p, \ (2n < 2^l)\)。

    \(g_{2n}^n = g^{\frac{p - 1}{2}}\)。

    由于 \((g^{\frac{p - 1}{2}})^2 \equiv g^{p - 1} \equiv 1\pmod p\),所以 \(g_{2n}^n\) 只可能同余 \(1\) 或 \(-1\)。

    又因为 \(g\) 为原根,\(\delta_{p}(g) = p - 1\)。

    若 \(g^{\frac{p - 1}{2}} \equiv 1\) 则与阶的最小性矛盾,所以 \(g^{\frac{p - 1}{2}}\equiv-1\pmod p\)。

  • \(\sum_{k = 0}^{n - 1}g_{n}^{ik}g_{n}^{-kj} \equiv \begin{cases} n & i = j\\ 0 & i \neq j \end{cases}\pmod p\),其中 \(i, j \in [0, n)\)。

优点:快,精确。

限制:模数要满足 \(p = 2^l + 1\)。

常见模数:

  • \(65537 = 2^{16} + 1, \ g = 3\)。

  • \(998244353 = 119 \cdot 2^{23} + 1, \ g = 3\)。

  • \(1004535809 = 479 \cdot 2^{21} + 1, \ g = 3 \quad > 10^{9}\)。

  • \(4179340454199820289 = 29 \cdot 2^{57} + 1, \ g = 3 \quad> 4\cdot 10^{18}\)。

A * B Problem Plussubmission

分治 FFT(NTT)

  1. 在模 \(998244353\) 意义下,计算 \(f(x) = \prod (x - a_i)\) 的各项系数。

    • 计算 \([l, mid]\) 之积。

    • 计算 \([mid + 1, r]\) 之积

    • \([l, mid]\) 与 \([mid + 1, r]\) 相乘。

    时间复杂度 \(O(n\log^2n)\)。

  2. 在模 \(998244353\) 意义下,计算 \(f(x) = \prod f_i(x)\) 的各项系数,其中 \(\sum\deg(f_i(x)) \le 10^5\)。

    可以和上题一样分治。

    也可以按照次数维护一个优先队列,每次相乘当前最小的两个,即一棵哈夫曼树。

标签:原根,pmod,NTT,varphi,delta,ind,equiv
From: https://www.cnblogs.com/Luxinze/p/18183107

相关文章

  • [数论] 原根
    书接上回...我们知道,我们在使用FFT时,靠的是单位根\(\omega\)。数学家证明这是复数域中唯一符合条件的数。可是它的浮点误差和带来的巨大运算时间使我们有点不能接受。于是,我们想想能不能找个替代品替代掉\(\omega\)。于是,原根就出现了!原根的引入阶对于一个数\(x\),在......
  • [Unit testing - React] Use the waitForElementToBeRemoved Async Util to Await Unt
    Sometimes,youmightneedtowaitforanelementtodisappearfromyourUIbeforeproceedingwithyourtestsetupormakingyourassertion.Inthislesson,wewilllearnaboutawrapperaroundthewaitForthatallowsyoutowaituntilanelementisremove......
  • WPF Behavior Interaction Triggers EventTrigger EventName CallMethodAction Target
    //xaml<Windowx:Class="WpfApp92.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.mic......
  • P7431【THUPC2017】小 L 的计算题 (牛顿恒等式)(分治NTT)(多项式求逆)题解
    知识点涉及:牛顿恒等式,分治\(NTT\),多项式求逆。这道题有一个推式子之后分治\(NTT+Ln+Exp\)的做法,不过也有一个不用\(Ln+Exp\)的做法(理论常数要小点,实际差不多)。题解:这道题可以牛顿恒等式直接推出一个非常好写的东西。首先看一下牛顿恒等式的描述:对于\(n\)次多项式\(A(......
  • NTT 的三次变八次优化
    就是将NTT的域扩到复数。我不知道高斯整数的其他取模方式,所以巨慢/xk。而且没用。我们知道高斯整数的神秘取模方式,使得其结果的范数小于除数的一半。然而我们发现这个取模在整数下的结果仍然在整数取模的同余系中!好很有精神!我们选取\(g=3,mod=998244353\),我们只需要验证\(......
  • FFT 与 NTT 学习笔记
    【概念】点值:给定多项式\(f(x)=a_0+a_1x+\cdots+a_{n-1}x^{n-1}\)和\(x_1\simx_m\),求\(f(x_1),f(x_2),\dots,f(x_m)\)。(\(m=n\))求点值的算法一般是\(O(n^2)\)的,但对于特殊的多项式,可以做到更快。插值:给定\((x_0,y_0),(x_1,y_1),\dots,(x_{n-1},y_{n-1})\),其中\(x_0\s......
  • 【模板】任意模数多项式乘法:三模 NTT
    前置知识https://www.cnblogs.com/caijianhong/p/template-crt.htmlhttps://www.cnblogs.com/caijianhong/p/template-fft.html题目描述任意模数多项式乘法solution首先我们打开https://blog.miskcoo.com/2014/07/fft-prime-table这篇文章找到\(998244353\)附近的几个质......
  • JSX.Element 和 React.ElementType的区别是什么?
    在React和TypeScript中,JSX.Element和React.ElementType代表了两种不同的概念:JSX.Element:JSX.Element是一个类型,表示由JSX编译后生成的实际React元素对象。当你在React应用中使用JSX编写组件时,每一个JSX表达式都会编译为一个JSX.Element对象。例如:constMyComponent:React.......
  • WPF GroupBox Expander ExpandDirection="Down" Expander.HeaderTemplate Expander.C
    //xaml<Windowx:Class="WpfApp43.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.mic......
  • JAVA注解-ElementType详解
    ava中元注解(用来标识注解的注解)有四个: @Retention@Target@Document@Inherited; @Retention:注解的保留位置@Retention(RetentionPolicy.SOURCE)   //注解仅存在于源码中,在class字节码文件中不包含@Retention(RetentionPolicy.......