博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
约数个数定理&约数和定理
阅读量:4654 次
发布时间:2019-06-09

本文共 969 字,大约阅读时间需要 3 分钟。

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/10139613.html

你可能感兴趣的文章
织梦教程
查看>>
杭电多校 Harvest of Apples 莫队
查看>>
C/C++心得-结构体
查看>>
函数名作为参数传递
查看>>
apt-get for ubuntu 工具简介
查看>>
数值计算算法-多项式插值算法的实现与分析
查看>>
day8-异常处理与网络编程
查看>>
Python基础-time and datetime
查看>>
Linux epoll 笔记(高并发事件处理机制)
查看>>
shell脚本练习01
查看>>
WPF图标拾取器
查看>>
通过取父级for循环的i来理解闭包,iife,匿名函数
查看>>
HDU 3374 String Problem
查看>>
数据集
查看>>
[Leetcode] unique paths ii 独特路径
查看>>
HDU 1217 Arbitrage (Floyd + SPFA判环)
查看>>
IntelliJ idea学习资源
查看>>
Django Rest Framework -解析器
查看>>
ExtJs 分组表格控件----监听
查看>>
Hibernate二级缓存配置
查看>>