【算法】数论基础——约数个数定理、约数和定理 python

目录


前置知识

需要掌握:唯一分解定理(算术基本定理)


约数

约数,即因数,定义为:
如果一个整数a可以被另一个整数b整除(即 a mod b = 0),那么b就是a的一个约数。


约数个数定理

假设有一个正整数,它可以进行质因数分解为:

其中p1,p2,······,Pk是不同的质数,而e1,e2,······,ek是对应的指数。
根据约数个数定理,n的正约数个数d(n)可以通过以下公式计算:

d(n)=(e1+1)×(e2+1)×······×(ek+1)

公式怎么得来?

解释:(组合数学乘法原理)
每个质因数 pi 可以在约数中出现从 0 到 ei 次,因此有 ei+1 种选择。
所有这些选择相互独立,因此总的约数个数就是所有质因数的不同选择方式的乘积。


拿数字举几个实例:



约数和定理

求所有约数的和:



好了,实际运用的时候到了

实战演练

阶乘约数 https://www.lanqiao.cn/problems/1020/learning/?page=1&first_category_id=1&problem_id=1020

思路分析:

可以借助唯一分解定理约数个数定理 解决本题

将 100!转化为多个质数乘积的形式,(对2-100使用唯一分解定理即可

再使用约数个数定理可得ans

题解code:

python 复制代码
from collections import defaultdict

# 唯一分解定理
def prime_factors(n):
    factors = []
    for i in range(2, n + 1):
        while n % i == 0:
            factors.append(i)
            n //= i
        if n == 1:
            break
    return factors

# 计数
res = []
for i in range(2, 101):
    res += prime_factors(i)
cnt = defaultdict(int)
for i in res:
    cnt[i] += 1

# 约数个数定理
ans = 1
for i in cnt.values():
    ans *= (i + 1)
print(ans)

总结

约数个数定理是数论中的一个重要定理,它提供了一种有效的方法来计算一个正整数的正约数(或因数)的数量。
约数和定理(也称为因数和公式)是数论中的一个重要概念,它提供了一种计算一个正整数的所有正约数之和的方法。


END
如果有更多问题或需要进一步的帮助,可以在评论区留言讨论哦!
如果喜欢的话,请给博主点个关注 谢谢

相关推荐
PP东2 分钟前
Pyhton基础之多继承、多态
开发语言·python
豆浩宇9 分钟前
Conda环境隔离和PyCharm配置,完美同时运行PaddlePaddle和PyTorch
人工智能·pytorch·算法·计算机视觉·pycharm·conda·paddlepaddle
一只鱼^_11 分钟前
牛客周赛 Round 108
数据结构·c++·算法·动态规划·图论·广度优先·推荐算法
菜鸟的日志30 分钟前
【音频字幕】构建一个离线视频字幕生成系统:使用 WhisperX 和 Faster-Whisper 的 Python 实现
python·whisper·音视频
小宁爱Python1 小时前
基于 Django+Vue3 的 AI 海报生成平台开发(海报模块专项)
人工智能·python·django
小刘的AI小站1 小时前
leetcode hot100 二叉搜索树
算法·leetcode
自信的小螺丝钉1 小时前
Leetcode 876. 链表的中间结点 快慢指针
算法·leetcode·链表·指针
红豆怪怪1 小时前
[LeetCode 热题 100] 32. 最长有效括号
数据结构·python·算法·leetcode·动态规划·代理模式
愚润求学1 小时前
【贪心算法】day6
c++·算法·leetcode·贪心算法
AI 嗯啦2 小时前
计算机的排序方法
数据结构·算法·排序算法