简单约数
当然是重要的图片:
关于约数
若整数 除以整数 的余数为 ,即 能整除 ,则称 是 的约数,记作 。
算数基本定理推论
在算数基本定理中:若正整数 被唯一分解为 ,其中 ,则 的正约数集合可写作:
的正约数个数为(可用乘法原理证明):
的所有正约数之和为:
求正约数集合
求 的正约数集合
类似试除法:
void DivideNum(const int n) {
if (n % i == 0) {
fac[++m] = i;
if (i != n / i)
fac[++m] = n / i;
}
}
由此我们得到一个推论:
一个整数 的约数个数上限为 。
求 每个数的正约数集合
如果枚举 试除法变成 显然太慢了,换个思路: 中以 为约数的数就是 的倍数 :
std::vector<int> fac[N];
void DivideNum(const int n) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n / i; j++)
fac[i * j].push_back(i);
}
}
复杂度是调和级数 的。
由此我们可以得到一个新的推论:
每个数的约数个数的总和大约为 。
最大公约数、最小公倍数
不加证明地给出一些定理,证明并不困难,大多可以通过定义和同余的推论来验证:
-
- 更损相减术
-
- 欧几里得算法
-
- 复杂度是 的,是最常用的求解 gcd 的方法。在高精度除法中可以考虑使用更损相减术来代替欧几里得算法
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】