1、如果我们要求一个数的所有因数的个数会怎么去求呢?

首先想到最简单的方法就是暴力求解就可以。当然数据小、或者测试数据少就很简单就可以过了。

2、如果求一个区间内的数的所有因数的个数呢?或者求一个区间内的数的因数最大的数以及最大的因数(正因数)的个数?

这样的话,数据大一些,组数多一些,可能就要Tle,所以可以想到用唯一分解定理,但是那是适用于分解成素因数,要怎么转化呢?

这就需要用到了约数个数定理。

约数个数定理

对于一个大于1正整数n可以分解质因数:

则n的正约数的个数就是

其中a1、a2、a3…ak是p1、p2、p3,…pk的指数。

(在证明上自己自行百度搜索就可以了。qwq)

3、如果我们需要求这个区间内具有最大个数因数的这个数的所有因数之和怎么办呢?

因为刚刚是按素因数来分解的,如果只是加上相应的次方数,肯定是不对的,那么要怎么解决这个问题呢,当时想了好久,不过脑子笨,采用各种暴力,当然也有成效,不过还是看看下面这个方法吧。

约数和定理

对于一个大于1正整数n可以分解质因数:n=p1^a1*p2^a2*p3^a3*…*pk^ak,

则由约数个数定理可知n的正约数有(a₁+1)(a₂+1)(a₃+1)…(ak+1)个,

那么n的(a₁+1)(a₂+1)(a₃+1)…(ak+1)个正约数的和为

f(n)=(p1^0+p1^1+p1^2+…p1^a1)(p2^0+p2^1+p2^2+…p2^a2)…(pk^0+pk^1+pk^2+…pk^ak)。

这个公式蛮好理解,但是要怎么去实现呢?

先把素因子存起来,再把幂指数存起来,最后依次加上,这样的方法当然可以,但是总归比较麻烦。

来看一下这个定理:设正整数n有素因子分解 n =(p1^α1)*(p2^α2)*(p3^α3)* ....... *(pk^αk),那么

所有因数和  σ(n)=[(p1^α1)-1 ] /(p1-1) * [(p2^α2)-1 ] / (p2-1) * .....  *[(pk^αk)-1 ]/(pk-1)

那么在每次遍历到该因数数,直接算一下累加起来就可以了。

代码板子回来再写QAQ.

参考文献:百度百科等网络资料加上自己理解。

转载于:https://www.cnblogs.com/lcchy/p/10139614.html

约数个数定理约数和定理相关推荐

  1. 算法刷题-数论-试除法求约数、约数个数、约数之和、最大公约数(辗转相除法)

    文章目录 acwing869. 试除法求约数 acwing870. 约数个数 acwing871. 约数之和 acwing872. 最大公约数 acwing869. 试除法求约数 acwing869. ...

  2. 约数个数、约数之和、约数

    文章目录 试除法求一个数的所有约数 求约数个数 求约数之和 欧几里得算法 试除法求一个数的所有约数 vector<int> get_divisors(int n) //求n的约数 {vec ...

  3. 数论 - 约数基础 【 试除法求所有约数 + 约数个数和约数之和 + 欧几里得算法-求解最大公约数 】

    数论-约数基础 1.约数定义 约数,又称因数.整数a除以整数b(b≠0) 除得的商正好是整数而没有余数,我们就说a能被b整除,或b能整除a.a称为b的倍数,b称为a的约数.在大学之前,"约数 ...

  4. 【算法基础15】如何求约数?约数个数?约数之和?最大公约数?

    一.试除法求约数 主要思想:由于当n/a=b时,a和b都是n的约数,即约数总是成对出现,可以在一次循环中同时找到i和n/i两个约数,只需要循环n/i次就能找到所有约数. 例题:求一个数的所有约数,并将 ...

  5. 数论(三)——约数(约数个数,约数和,公约数)

    目录 试除法求约数 求约数个数 约数之和 欧几里得算法 试除法求约数 试除法求一个数的所有约数,思路与判断质数的思路一样,优化的方法也是一样的,这里就不再赘述,没有看过我之前关于质数的博客可以点这里. ...

  6. [数论]线性筛——约数个数与约数和

    参考博客 参考博客 参考博客 这个讲的挺好 预备知识点: 大于1的数n可以分解质因数: n=p1a1×p2a2×p3a3*-*pka n的约数的个数是(a1+1) * (a2+1) * (a3+1)- ...

  7. bzoj1225 [HNOI2001] 求正整数 约数个数定理+对数

    一看到约数个数就可以很快想到约数个数定理 然后就是反推,枚举约数 注意需要高精,但搜索过程高精会T,所以利用对数运算对乘和次方降级 如 2^3*3*5  →    log(2^3*3*5) = 3*l ...

  8. [数论] 约数个数定理与约数和定理

    约数个数定理 对于一个大于1正整数n可以分解质因数: 则n的正约数的个数就是   . 其中a1.a2.a3-ak是p1.p2.p3,-pk的指数. 约数定理证明 首先同上,n可以分解质因数:n=p1^ ...

  9. 约数定理(约数个数定理,约束和定理)

    约数个数定理: 对于一个大于1正整数n可以分解质因数: 则n的正约数的个数就是 . 其中a1.a2.a3-ak是p1.p2.p3,-pk的指数. 定理简证: 首先同上,n可以分解质因数:n=p1^a1 ...

最新文章

  1. (转)关于数据库主键和外键(终于弄懂啦)
  2. 树上启发式合并问题 ---- D. Tree and Queries[树上启发式合并+树状数组]
  3. jQuery图片轮播
  4. Java Integer于Int 进行==双等于的内存比较时的一些问题说明
  5. ISA服务器之域内×××用户在外网通过CA验证连接域内×××服务器
  6. Gartner:2021全球安全和风险支出将超1500亿美元
  7. 2019-2020年中国小吃产业发展报告
  8. 使用Python配合Evernote完成每周工作安排
  9. Map 和 WeakMap
  10. python 基础学习--运算符集合
  11. 基于log4net的支持动态文件名、按日期和大小自动分割文件的日志组件
  12. iOS数据库的使用(一):FMDB多线程
  13. 纪念自己初中的住宿生活
  14. matlab曲线导入cad,MATLAB导入CAD数据
  15. PC使用js调用qq聊天
  16. iOS之AR开发--demo制作篇:图片识别
  17. 通用计算机的发展历程,中国计算机发展史
  18. 多位博士毕业去了三四流高校,目前惨不忍睹……
  19. openssl x509 证书命令
  20. JS变量的定义和数据类型

热门文章

  1. 计算机的启动过程———《x86汇编语言:从实模式到保护模式》读书笔记补遗01
  2. 第15章习题解答(二)——《x86汇编语言:从实模式到保护模式》读书笔记41
  3. 为什么wait、notify必须在synchronized保护的同步代码中
  4. 日常生活小技巧 -- 虚拟串口工具
  5. 服务器端的根目录放置文件,放置在网站根目录下
  6. Vitalik Buterin:Casper 权益证明与分片技术最新进展
  7. 用 Go 构建一个区块链 -- Part 5: 地址
  8. Ransomware Locky Analysis
  9. 【问链财经-区块链基础知识系列】 第三十三课 区块链溯源方案设计-中检集团区块链溯源平台
  10. java 多线程数量_java多线程之计算数量