【算法】数论基础——约数个数定理、约数和定理 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
    如果有更多问题或需要进一步的帮助,可以在评论区留言讨论哦!
    如果喜欢的话,请给博主点个关注 谢谢

    作者:查理零世

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【算法】数论基础——约数个数定理、约数和定理 python

    发表回复