数论之因子个数的求法
来源:互联网 发布:cmmi3软件开发流程 编辑:程序博客网 时间:2024/05/21 12:41
1. N的因子个数
条件:给定任意一个一个正整数N
要求:求其因子的个数
首先给出结论:对于任意的整型N,分解质因数得到N= P1^x1 * P2^x2* …… * Pn^xn;
则N的因子个数M为 M=(x1+1) * (x2+1) * …… *(xn+1);
证明过程:
首先 举个例子吧
24 = 2^3 * 3^1;
其质因子有:为2和3 指数为 3和1
那么对于2 有0 1 2 3四种指数选择,对于3 有0 1两种指数选择
所以 就是4 * 2 = 8 个因子个数
如果还是不懂,那么我们就列举出来吧
2 3
2^0*3^0=1 2^0*3^1=3
2^1*3^0=2 2^1*3^1=6
2^2*3^0=4 2^2*3^1=12
2^3*3^0=8 2^3*3^1=24
结果很清晰了吧??其实这里用到了数学的排列组合的知识
也就是说每一个质因子的不同指数幂与其它质因子相乘,得到的结果一定不会重复
因此能够将所有的因子都列举出来。
所以N的因子数M,我们可以用M=(x1+1) * (x2+1) * …… *(xn+1)表示
2. N!的因子个数
有上面的结论,这个问题就变得明朗多了吧?嘿嘿,不要着急,这里面还有许多细节问题需要我们考虑。
a. 最大的质因子一定不会大于N
b. N的质因子并不完全包含N!所有的质因子
至于原因是什么,自己想想吧,嘿嘿
那我们就直接说思路了:
首先,我们可以把所有的N以内的质数给打表求出来
然后,求每一个质因子的指数个数,这里用到了一个公式,:
ei=[N/pi^1]+ [N/pi^2]+ …… + [N/pi^n] 其中[]为取整 附:这一步最近又想到了一个更好的方法 int ei=0;while(N) ei+=(N/=pi); 怎么样?? (想一想为什么,实在想不通你就举个例子试一下)
最后,就是套公式计算了,M=(e1+1)(e2+1)……*(en+1)
算了,还是举个例子吧
比如5!
质因子2的指数是 2+1=3;
质因子3的指数是 1;
质因子5的指数是 1;
所以因子个数为 4 * 2 * 2 = 16
5!=120 因子有1 2 3 4 5 6 8 10 12 15 20 24 30 4060 120 刚好16个
3.给定数列的乘积因子个数
其实这个也是基于第一个结论得到的。
给定 a1 a2 a3 …… an;
我们可以找到最大的一个元素Max(a);
把Max以内的素数打表
然后把质因子清零,进行如下循环,就可以找到各个质因子的个数:
for(a=1;a<=n;a++)
for(p=1;p<_;p++ )
if(__) e(p)++;
这样质因子的质数个数就求出来了,然后根据公式M=(e1+1)*(e2+1)*……*
(en+1)求出因子个数
阅读全文
0 0
- 数论之因子个数的求法
- 数论之因子个数的求法
- 数论之因子个数的求法
- 数论之因子个数的求法
- 数论之因子的个数
- 数论之数的因子个数
- POJ——2992(数论之因子个数)
- HDU 1299(数论,求n的素因子个数)
- (阶乘末尾0的个数的求法)求1~N中因子的数量的方法
- hdu3641 Treasure Hunting(灵活题,阶乘的素因子个数求法)
- poj——1845(数论之因子的和)
- 多个数的最小公倍数求法
- 叶子节点个数之递归求法
- hadoop & hive任务优化之map个数的影响因子
- hdu 1299 Diophantus of Alexandria(数论(因子个数和))
- LIGHT OJ 1278 Sum of Consecutive Integers [因子个数]【数论】
- 51nod 1189 阶乘分数 [因子个数+逆元]【数论】
- 质数因子求法
- 大数据(三十七)机器学习【机器学习语言】
- Android 从external storage加载so文件
- wordcloud用来制作中文词云
- java怎么得到字符对应的char值
- GoLand软件的免激活使用
- 数论之因子个数的求法
- Effective C++解析 Item3:尽量使用const (补充)物理的与逻辑的常量性
- docker容器的时间问题
- 大数据时代如何提升研发效率
- 计算机启动与BIOS
- 【笔记】Sqoop 脚本开发规范
- 作业
- 蓝桥杯 算法提高 队列操作
- 服务化了,没想到耦合更加严重?