最新要闻
- 种植牙的高价:被打碎了
- 为一季度量产做准备!宁德时代申请注册“麒麟电池”商标
- MacBook Air迎15岁生日 首次亮相由乔布斯从信封取出
- 全球报道:市场被国产手游席卷了 日本:课税!
- 今日最新!男孩寒假送外卖:20天挣7700元 给妈妈2000买年货
- 热资讯!一加11R现身印度官网:低频版骁龙8+、120Hz高刷屏
- 当前资讯!法拉利超跑当婚车 雪天接亲上坡频繁打滑 网友:后驱车肯定滑
- 一次性塑料餐具:开始被禁了
- 新一代安卓机皇!三星Galaxy S23 Ultra拍照分辨率达12240x16320
- 环球热点评!旺旺大礼包 经典零食箱62元2.7斤 送礼囤货必备
- 极端寒流来袭:吉尔吉斯斯坦终年不冻“热湖”罕见被冰封
- 弟弟发现姐姐首饰装备库原地惊了:被骗好多年!网友求购买链接
- 天天热资讯!男子网购晾衣杆 却被告知2024年发货!客服回应:说错了
- 【时快讯】爱优腾收费贵、限制多 网友奉上免费视频攻略:全靠Intel
- 每日焦点!车祸后发视频庆大难不死 结果被殡葬号关注!男子:别介
- 热讯:大海送“年货”!烟台海边再现大量海肠 大家抢疯:有人一会捞3千斤赚大
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
算法学习笔记(11): 原根
原根
此文相对困难,请读者酌情食用
在定义原根之前,我们先定义其他的一点东西
(相关资料图)
阶
通俗一点来说,对于 \(a\) 在模 \(p\) 意义下的阶就是 \(a^x \equiv 1 \pmod p\) 的最小正整数解\(x\)
或者说,\(a\) 在模 \(p\) 意义下生成子群的阶(群的大小)
再或者说,是 \(a\) 在模 \(p\) 意义下的循环节的大小
循环节,生成子群……真绕……其实两者很类似
两者的大小也就是在模 \(p\) 意义下集合 \(\{a^1, a^2, a^3,\dots,a^k\}\) 不重复元素的个数
可以通过欧拉定理可知 \(a^{\varphi(p)} \equiv a^0 \equiv 1 \pmod p\) 也就是说存在一个数 \(k\),使得 \(a^k \equiv a \pmod p\)
所以,就有了循环……
我们将 \(a\) 在模 \(m\) 意义下的阶记作 \(ord_ma\)
显然,无论是根据群论还是什么,\(ord_ma\) 一定是 \(\varphi(p)\) 的因数
特别的,当 \(ord_ma = \varphi(p)\) 时,称 \(a\) 为模 \(p\) 意义下的一个原根
那么原根的定义出来了……
原根
上述定义或许不是那么简单,我们换一种说法
\[\begin{aligned}\forall x \in [1, \varphi(p)), a^x \not\equiv 1 \pmod p \\a^{\varphi(p)} \equiv 1 \pmod p\end{aligned}\]满足上述两个条件的数 \(a\) 就是模 \(p\) 意义下的一个原根
这两个条件也是我们在程序中验证原根的方法 QwQ
而对于原根来说,\(a^1, a^2,\dots,a^{\varphi(p)}\) 在 \(m\) 下各不相同,他们就是最短的循环节,也是模 \(p\) 意义下的完全剩余系,或者说原根的生成子群
但是,并不是每一个数都存在原根
例如 \(\varphi(8) = 4\),但是没有任何数在模 \(8\) 下的阶为 \(4\)
为判断一个数是否有原根,我们有一个重要的定理:
正整数 \(k\) 有原根的充要条件为 \(k\) 能表示成 \(2, 4, p^n, 2p^n\) 中的任何形式之一,其中 \(p\)为奇素数
由于证明比较复杂,若感兴趣可以参见这篇博客 原根证明
那么如何求出一个数 \(p\) 有多少个原根
假设我们已经求出了一个原根 \(g\)
由于原根一定存在与 \(p\) 的完全剩余系中,而 \(g\) 的生成子群与之等价,也就是说,我们需要在
\[\{g^k|k \in [1, \varphi(p))\}\]这个集合中寻找所有的原根
所以,考虑构造出判断阶的方法。我们令 \(d = gcd(k, \varphi(p))\)
那么
\[g^{k\frac {\varphi(p)} d} \equiv g^{\varphi(p) \frac kd} \equiv 1^{\frac kd} \equiv 1 \pmod p\]那么 \(\frac k{gcd(k, \varphi(p))}\) 也就是 \(g^k\) 的阶
若需要满足原根的定义,我们必须使得 \(gcd(k, \varphi(p)) = 1\)
同时考虑 \(g = g^1\),\(gcd(1, \varphi(p)) = 1\),也就是说有总共有 \(\varphi(\varphi(p))\) 个原根
这同时启发我们,只要我们找到了任意一个模 \(p\) 意义下的原根,我们就可以求出所有原根。
至于如何找到原根,选择暴力枚举即可
有证明:如果一个数 \(n\) 有原根,则其最小原根在渐近意义下不大于 \(\sqrt[4]n\) 级别,所以直接枚举是没有任何问题的
那么我们总结一下求 \(n\) 的原根的所有步骤
预处理
利用线性筛求出所有的质数以及每一个数的 \(\varphi\) 值
对每一个筛出的质数,标记出所有 \(p^q\) 和 \(2p^q\) (别忘了\(2, 4\))
判断 \(n\) 是否有原根
求最小原根
求出 \(\varphi(m)\) 的所有质因数 \(i\),记录 \(m/i\) (记得将 \(1\) 也记录进去)
枚举一个数 \(g\),对于每一个记录的数 \(j = m/i\) 分别计算 \(g^j\),如果\(i^j \equiv 1 \pmod m\) ,说明 \(i\) 不是原根 (这里再下文中有解释)
重复第二部,直到找到一个原根 \(g\) 为止
求所有原根
枚举 \(k \in [1, \varphi(m))\)
如果 \(gcd(k, \varphi(m)) = 1\),则 \(g^k\) 是一个原根,记录下他
解释:求最小原根的判断
为什么我们只需要枚举 \(m/i\) 就行了?
考虑我们将 \(m\) 分解成 \(m = i_1^{a_1} i_2^{a_2}\dots i_k^{a_k}\)
由于如果需要满足 \(i^j \equiv 1 \pmod p\),一定有 \(j|\varphi(p)\)
那么对于 \(m/i = kj\),一定有 \(i^{m/i}\equiv 1 \mod p\)
也就是说,所有 \(m/i\) 就包含了所有情况了
那么为什么要加上 \(1\) 呢,这就交给读者消化思考喽 _
参考代码如下:真的只供参考,这种写法特别慢
templateinline T gcd(T x, T y) {T z;while (y) z = x % y, x = y, y = z;return x;}templateinline T qpow(T a, T x, T p) {T r(1); a %= p;while (x) {if (x & 1) r = (r * a) % p;a = (a * a) % p, x >>= 1;}return r;}int phi[N], notp[N];std::vector prm;void getPrm() {phi[1] = 1;for (int i = 2; i < N; ++i) {if (!notp[i]) prm.push_back(i), phi[i] = i - 1;for (const int &j : prm) {if (i * j >= N) break;notp[i * j] = true;if (i % j == 0) {// i | n && i^2 | n => phi(n) = phi(n / i) * iphi[i * j] = phi[i] * j; break;} else {// i | n && not i^2 | n => phi(n) = phi(n / i) * (i - 1)phi[i * j] = phi[i] * phi[j];}}} // end getPrm for}bool exists[N];void getExists() {exists[2] = exists[4] = true;for (int i = 1; i < (int)prm.size(); ++i) {int p = prm[i];for (int q = p; q < N; q *= p) {exists[q] = true;if (q * 2 < N) exists[q * 2] = true;}}// printf("Exists init!\n");}void factorize(int x, vector & v) {v.push_back(1);for (const int &p : prm) {if (p >= x) break;if (x % p == 0) v.push_back(x / p);}}void getAll(int p, vector & v) {// no answerif (!exists[p]) return;int ph = phi[p];int fst, cur;vector factors; factors.clear();factorize(ph, factors);// enum i which gcd(i, m) == 1// find first element i suit i^ph = 1 mod pfor (int i = 1; ; ++i) {if (gcd(i, p) != 1) continue;// if (qpow(i, ph, p) != 1) continue;bool valid = true;// we need i only if i^ph = 1 mod p, not other numbers.for (auto &e : factors) {if (e != ph && qpow(i, e, p) == 1) {valid = false; break;}}if (valid) {fst = cur = i; break;}}for (int i(1); i <= ph; ++i) {if (gcd(i, ph) == 1) v.push_back(cur);cur = cur * fst % p;}}
考虑模板可能有爆 int 的风险,请参考者合理使用 long long
这样通过
getAll
得出的vector
是乱序的,需要再排序一次
-
【全球快播报】ASP.NET Core+Element+SQL Server开发校园图书管理系统(一)
随着技术的进步,跨平台开发已经成为了标配,在此大背景下,ASP NETCore也应运而生。本文主要基于ASP ...
来源: 算法学习笔记(11): 原根
【全球快播报】ASP.NET Core+Element+SQL Server开发校园图书管理系统(一)
Blazor技术入门
种植牙的高价:被打碎了
为一季度量产做准备!宁德时代申请注册“麒麟电池”商标
MacBook Air迎15岁生日 首次亮相由乔布斯从信封取出
全球报道:市场被国产手游席卷了 日本:课税!
今日最新!男孩寒假送外卖:20天挣7700元 给妈妈2000买年货
热资讯!一加11R现身印度官网:低频版骁龙8+、120Hz高刷屏
当前资讯!法拉利超跑当婚车 雪天接亲上坡频繁打滑 网友:后驱车肯定滑
一次性塑料餐具:开始被禁了
全球热议:关于GIT使用的扫盲知识
【深度解读】卫星通信工作频段
新一代安卓机皇!三星Galaxy S23 Ultra拍照分辨率达12240x16320
环球热点评!旺旺大礼包 经典零食箱62元2.7斤 送礼囤货必备
极端寒流来袭:吉尔吉斯斯坦终年不冻“热湖”罕见被冰封
弟弟发现姐姐首饰装备库原地惊了:被骗好多年!网友求购买链接
天天热资讯!男子网购晾衣杆 却被告知2024年发货!客服回应:说错了
【时快讯】爱优腾收费贵、限制多 网友奉上免费视频攻略:全靠Intel
每日焦点!车祸后发视频庆大难不死 结果被殡葬号关注!男子:别介
热讯:大海送“年货”!烟台海边再现大量海肠 大家抢疯:有人一会捞3千斤赚大
环球时讯:配F1赛车同款发动机能追中国高铁!梅赛德斯AMG ONE正式交付
【全球热闻】液流电池有望“弯道超车”?新技术使其尺寸锐减75% 成本更低
视点!蔚来AR眼镜专利公布:可稳定显示车载信息
AITO问界降价效果一般 李想:销量少的产品、没资格成为别人的竞品
索尼PS5千万别长期竖向放置?反转了!维修店:原装主机别担心
Adversarial Active Learning based Heterogeneous GNN for Fake news Detection-ICDM
环球要闻:linux科普:如何标准的安装和升级软件
vue事件修饰符
《流浪地球2》导演郭帆教刘德华济宁话拜年:父老乡亲们新年快乐
当前播报:不怕零下40℃极寒!最“抗冻”复兴号将在“最北”高铁首次开行
美国一州提议“禁售电动车”:石油、天然气太挣钱了
快报:高手在民间!男子7厘米壶内壁画生肖兔
河北女司机发现大量车“逆行” 真相来了:都没逆行 路口设计问题
环球速讯:AcWing. 1072 树的最长路径
【天天聚看点】微信对话生成器,WeChat对话生成,可生成文字、语音、转账、红包,朋友圈装X神器~
天天简讯:Spring Boot 项目打包 .exe 可执行程序,实战来了!
41光年远 韦伯望远镜首次发现系外行星:跟地球几乎一样大
【热闻】连刷10小时B站无问题!联想小新Pro 14搭载75Wh大电池
天天速读:《黑神话:悟空》定档2024年夏天!NVIDIA:将支持光追和DLSS 3
暴风再被限消未履行总额超8亿 昔日风光变为凄惨落幕
【环球聚看点】十二生肖为什么没有猫咪?真相揭开
如何安装球形门锁
Opengl ES之RGB转NV21
快看点丨A Representation Learning Framework for Property Graphs-KDD19
非常流行的vue库,看这一篇就够了
理想车主夜间驾车中控显示有人追车?官方回应:视觉感知算法Bug
今日精选:一驾校打广告称不识字也能考驾照:3次考不过退费
55%~100%五种浓度:怡浓纯黑巧克力35元起400g大促
环球通讯!开电动车返乡要三思 网友晒高速服务区充电现状:已排成长队
联想小新Pro超能本2023升级140W快充:半小时就可回血66%
算法学习笔记(10): BSGS算法及其扩展算法
前沿资讯!2023年了 游戏还在背锅
第一款8K显示器发售6年:居然没人接班了
天天快资讯:丈夫称老家有别墅 女子回村直呼上当:网友调侃诚不欺我 真纯天然
被中国游客狠狠抛弃:韩国人口连续三年减少 女多男少拉不动内需
环球播报:便宜了2.5元 2023年春节档电影票价格7年来首次下降:你愿意去看吗?
合资家轿之王!新款日产轩逸e-POWER曝光:百公里仅需4升油
今热点:一箭14星成功升空 卫星首图回传:路面汽车清晰可见
AtCoder Beginner Contest 285 解题报告
新一代云原生日志架构 - Loggie的设计与实践
皮俑是什么做成的?皮俑为什么救吴邪?
擅长画虎的画家是?擅长画虎的十大画家
神奇宝贝的观看顺序是什么?神奇宝贝的大结局是什么?
用上半固态电池!赛力斯发布海外新车型SERES 5:订单超2万
国产骄傲!中国年度十大畅销新能源车型:外资仅有特斯拉上榜
每日播报!游客滑雪失控致女生被撞倒后抽搐 医生:危险数极高、常见骨折
拿老款忽悠当新款卖 女车主退车被日系4S店老板辱骂
风调雨顺的意思是什么?风调雨顺的下联是什么?
小年为什么分南方和北方?小年为什么吃麻糖?
液晶显示器故障怎么解决?液晶显示器故障维修大全
qq空间打不开是什么原因?qq空间打不开怎么办?
cf怎么鬼跳没声音?cf鬼跳教程按键手法
土豆网怎么下载?土豆网怎么没有了?
环球热讯:1.PyQt5【窗口组件】小部件-QWidgt
阿里云邮箱怎么注册?阿里云邮箱怎么发送邮件?
女粉丝入手小米13 曾是十年资深果粉:被小米和雷军打动
当前滚动:二手车商要“气晕”!美国已有特斯拉新车价格低于二手车
低调的江西 盛产新能源富豪
2023央视春晚主持人阵容公布:首次迎来双90后
每日头条!衡山雾凇火了 多名游客滑冰下山很危险 景区调整开放时间
Ansible 学习笔记 - 批量巡检站点 URL 状态
世界观速讯丨node和npm如何升级版本
世界信息:把车变成船 比亚迪真会玩
天天报道:《中国奇谭》值得这么夸吗?
【世界播资讯】首搭麒麟电池 全球MPV续航最长!极氪009开启交付
三星Galaxy S23系列售价泄露:12GB+1TB版本超1万元
行驶1900多米!祝融号已在火星留下近4000个“中”字
C#代码整洁之道读后总结与感想
【快播报】私家车与油罐车高速并排堵路 货车司机看不下去 主动让路
环球消息!男子开车时被激光笔照射 瞬间眼前一片黑!专家称可能会永久损伤
世界观点:小编要失业了 美国科技媒体CNET用AI写文章:读者完全没发现
天天快看点丨马斯克回应车主维权:涨价也没人给我补差价 就这吧
视焦点讯!太傲慢!微信更新内容仅“九个字” 网友:怕大家知道更新了什么吗?
全球速看:油车也有续航焦虑 高速服务区爆满:排队一小时 加油限量100元
消息!小米上架抗原试剂盒:19.9元5个 现货供应
《三体》电视剧开播 广受好评 网友:没看过原著的也被深深吸引
世界最新:2023春节档预售票房破亿:《流浪地球2》排片率第一 吴京/刘德华主演
世界今日报丨Recyclerview列表视频自动播放方案
观天下!QSAN A Quantum-probability based Signed Attention Network for Explainable Fa