当前位置: 首页 > news >正文

质数 gcd 同余总结

一、质数

1. 定义

如果一个正整数只有 \(1\) 和它本身两个因数,那么这个数就是质数。

注意,\(1\) 既不是质数,也不是合数!

2. 判定单个方法

首先,最暴力的做法肯定是从 \(1\) 枚举到 \(n\)

bool isprime(int x) {if (i <= 1) return false;for (int i = 2; i < x; i++) {if (x % i == 0) return false;}return true;
}

这个时间复杂度是 \(O(x)\) 的。

但我们注意到,如果 \(i\) 可以被 \(x\) 整除,那么 \(\dfrac{x}{i}\) 也可以被 \(x\) 整除,所以枚举到 \(\sqrt{x}\) 即可。

bool isprime(int x) {if (x <= 1) return false;for (int i = 2; i * i <= x; i++) {if (x % i == 0) return false; }return true;
}

3. 分解质因数

如果 \(a\) 能被 \(b\) 整除,那么 \(b\) 就是 \(a\) 的因数。

根据唯一分解定理

任何一个大于 \(1\) 的整数都可以被分解成有限个质数的乘积的形式。

所以可以写成

\[a = p_1^{e_1}p_2^{e_2}\dots p_k^{e_k} \]

所以,可以枚举质数来分解质因数。

vector<int> getfactor(int x) {vector<int> res;for (int i = 2; i * i <= n; i++) {if (n % i == 0) {res.push_back(i);while (n % i == 0) n /= i;}}if (x != 1) res.push_back(x);return res;
}

有什么问题吗?

注意到,\(i \times i\) 可能爆 \(int\)!!!

因数的数量

完全平方数有奇数个因数,非完全平方数有偶数个因数。

\(n\) 最多有多少个因数?

答:\(2\sqrt n\) 个。

实际上,\(1\)\(n\) 的因数个数之和的数量级只有 \(n\log n\),所以单个数的因数个数期望是 \(\log\)

但实际差常数倍。

筛法

埃氏筛,原理是利用倍数关系找出合数。

bitset<N> vis;vector<int> init_prime() {vector<int> prime;for (int i = 2; i <= N; i++) {if (!vis[i]) {prime.push_back(i);for (int j = i * i; j <= N; j += i) {vis[j] = yrue;}}}    return prime;
}

二、最大公因数

前言:借鉴了亿下 OI-WIKI。

定义

最大公约数即为 Greatest Common Divisor,常缩写为 gcd.

一组整数的最大公约数,是指所有公约数里面最大的一个.

欧几里得算法

如果我们已知两个数 \(a\)\(b\),如何求出二者的最大公约数呢?

不妨设 \(a > b\)

我们发现如果 \(b\)\(a\) 的约数,那么 \(b\) 就是二者的最大公约数.

我们通过证明可以得到 \(\gcd(a,b)=\gcd(b,a \bmod b)\)

在部分 GCC 中可以用 __gcd(a, b) 函数来求最大公约数,使用该函数可能会导致预期之外的问题(用 long long)。

如果两个数 \(a\)\(b\) 满足 \(\gcd(a, b) = 1\),我们称 \(a\)\(b\) 互质.

三、同余

如果两个数 \(a\)\(b\)\(m\) 得到的结果相同,那么我们就称 \(a\)\(b\) 在模 \(m\) 的意义下同余。

比如 \(12\)\(15\) 就在模 \(3\) 的意义下同余。

在模 \(m\) 意义下同余的两个数,做模 \(m\) 意义下的 \(+\)\(-\)\(\times\) 时可以相互替换,结果不变

比如 \((12 + 1) \mod 3 = 1\)\((15 + 1) \mod 3 = 1\)

但是除法不行!

除法要求逆元。

逆元就是解 \(ax \equiv 1 \pmod{P}\) 这个方程。

所以 \(x \equiv a^{-1} \pmod P\)

所以可以用 exgcd,可以用 Quickpow

http://www.jsqmd.com/news/651339/

相关文章:

  • 飞利浦HX9352电动牙刷摔坏自救指南:从拆机到更换锂电池与MP9361芯片的完整流程
  • Solutions - 板刷 UOJ 小记
  • GLM模型这么火,咱们用vllm也咧一个呗!
  • Steam成就管理终极指南:如何免费掌控你的游戏成就
  • 手把手教你用STM32F103C8T6和ZH03B传感器DIY一个PM2.5检测仪(附完整代码)
  • 中小企业福音:5分钟搞定StarWind Virtual SAN双节点安装(附详细截图)
  • 国产崛起之路:本土在线粘度计品牌技术实力与市场表现评析 - 品牌推荐大师1
  • 百度网盘秒传脚本:三步实现永久文件分享的革命性方案
  • 2026年正规外汇平台有哪些 盘点新手必读 - 速递信息
  • CSS复合属性:交互提效与实战技巧
  • 用MATLAB手把手复现OFDM通信:从子载波到循环前缀,一个完整帧的诞生记
  • PvZWidescreen:为经典游戏注入现代显示适配能力
  • Android Studio中文语言包:打破语言壁垒,提升中文开发者效率的终极解决方案
  • 不变扩展卡尔曼滤波(IEKF)在无人机位姿估计中的实践与优化
  • 人源肝芯片前沿研究:Thykamine在MASH纤维化与炎症中的剂量依赖性调控作用【曼博生物供应微流控器官芯片】
  • PHP SAAS 框架常见问题——配置问题——小程序消息推送配置 Token 校验失败
  • 掌握高效笔记迁移:OneNote Md Exporter全面解析与最佳实践指南
  • 别再死记硬背UML九种图了!用这套实战案例(含CPS系统建模)帮你真正理解
  • 5分钟打造你的专属音乐伴侣:foobar2000开源歌词插件终极指南
  • 手把手教你用C语言在粤嵌GEC6818上实现一个多媒体桌面(附完整源码)
  • 手把手解决小熊派H3863开发板Python环境冲突问题(附conda避坑指南)
  • 别再手动配时钟树了!用STM32CubeMX 6.7.0图形化工具5分钟搞定STM32F1/F4系列工程初始化
  • 炉石传说HsMod插件:55项功能全面指南与高效安装教程
  • 告别启动恐慌:详解嵌入式Linux中root=参数的正确姿势(附mmcblk、mtd、nfs实例)
  • 别再让FreeRTOS空跑耗电了!手把手教你配置STM32F4的Tickless模式(基于CubeMX)
  • 用ESP32和光敏传感器DIY一个智能小夜灯,5分钟搞定自动开关
  • 魔兽争霸III兼容性修复终极指南:3大核心功能让经典游戏重生
  • 2026年4月贵阳贴隐形车衣/汽车玻璃贴膜/汽车改色贴膜/汽车订制彩绘/汽车凹陷无痕修复哪家好 - 2026年企业推荐榜
  • 终极指南:3分钟快速部署PVE-VDIClient,轻松管理Proxmox虚拟桌面
  • Triton的并行哲学:从Grid与Program ID到高效GPU任务分发