[数论] 原根
书接上回...
我们知道,我们在使用 FFT 时,靠的是单位根 。
数学家证明这是复数域中唯一符合条件的数。
可是它的浮点误差和带来的巨大运算时间使我们有点不能接受。
于是,我们想想能不能找个替代品替代掉 。
于是,原根就出现了!
原根的引入
阶
对于一个数 ,在 的意义下,存在一个最小的正整数 ,使得 ,特别的,当 不存在时,我们认为 。
这么个理解法,举个例子:
在 情况下, 的阶是 。因为 。
说白了就是求循环节。
所以有 的情况就是 的 的因数,到 后死循环了。
根据伟大的欧拉函数,我们知道这个循环节最多是 。
我们记 表示 的阶,在 意义下。
原根
我们记 的 ,叫做 的原根。
只有 的数才存在原根。(,)
证明最后写。
性质
-
对于
-
如果我们知道一个原根 ,可以构造出其它所有原根。
我们把 的 求出来。然后找到任意一个原根 ,然后 像 连边, 向 连边..... 这样,最终会变成一个简单环。
每个原根等同于往这个环上每次跳 跳边,然后遍历每个点一次回到原点。
所以,原根的数量是 。 -
原根是稠密的,最小原根近似于 。
求法
我们知道性质后,我们想直接枚举出一个原根。
我们想想怎么判断一个数 是不是原根。
- 引理:只需判断 的因数即可
假设我们已经得到一个环,存在一个正确的原根 每次跳一步得到。假设每次跳 步,环大小为 ,那么最终这个环的大小是
所以我们可以证明得到,环的大小总是 的约数,所以我们枚举每个约数看看跳这么多步是不是 即可。
求一个原根的算法就已经得到了,时间复杂度是 。
然后就是一个原根推所有原根。构造一下就行了,时间复杂度是 。
其实呢,求原根是很纸币的行为,有一个就够了,要那么多干啥。
可以查这个:原根表
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)