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

【算法】数论基础——约数个数定理、约数和定理 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:

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


http://www.kler.cn/a/521185.html

相关文章:

  • 【Docker】Docker入门了解
  • DeepSeek-R1:强化学习驱动的推理模型
  • SpringBoot+Electron教务管理系统 附带详细运行指导视频
  • 20.Word:小谢-病毒知识的科普文章❗【38】
  • 高低频混合组网系统中基于地理位置信息的信道测量算法matlab仿真
  • Autosar-Os是怎么运行的?(多核系统运行)
  • 2024 开源社年度报告:拥抱开源新生活
  • 消息队列篇--扩展篇--码表及编码解码(理解字符字节和二进制,了解ASCII和Unicode,了解UTF-8和UTF-16,了解字符和二进制等具体转化过程等)
  • DroneXtract:一款针对无人机的网络安全数字取证工具
  • 从Stargate看全球科技变局与中国IT互联网的破局之路
  • 每日 Java 面试题分享【第 13 天】
  • 2025最新 Docker 国内可用镜像源仓库地址(01月02日更新)
  • 【UE】Level、World
  • Android AutoMotive--CarPropertyService
  • AIGC专栏18——EasyAnimateV5.1版本详解 应用Qwen2 VL作为文本编码器,支持轨迹控制与相机镜头控制
  • 【WebRTC - STUN/TURN服务 - COTURN配置】
  • Linux二进制部署K8s集群的平滑升级教程
  • uniapp版本升级
  • 菜鸟开发之多表联合增删改
  • Crewai框架添加日志功能
  • GD32F470 USB虚拟串口
  • Day40:列表的排序
  • python 变量范围的定义与用法
  • 汽车网络信息安全-ISO/SAE 21434解析(中)
  • 拖拽移动(Semi Design)
  • 《一起做很甜的梦!》