• 数论之数的因子个数


    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)求出因子个数
  • 相关阅读:
    python for test
    python链接mysql pymysql
    MongoDB数据表添加字段
    NodeVisitor
    无法解决的错误
    一个点绕着另一个点旋转一定角度后的坐标
    2.0版本里程碑,研发日志
    osg Node getParentalNodePaths()报错
    TeslaManage 2.0编译日志
    机械臂模拟2.0
  • 原文地址:https://www.cnblogs.com/yyf573462811/p/6365368.html
Copyright © 2020-2023  润新知