码迷,mamicode.com
首页 > 其他好文 > 详细

因子和与因子个数

时间:2015-01-22 14:38:12      阅读:1453      评论:0      收藏:0      [点我收藏+]

标签:

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!中含有某个因子个数的方法

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

转载于:http://www.cnblogs.com/dolphin0520/archive/2011/04/11/2012891.html

求n的阶乘某个因子a的个数,如果n比较小,可以直接算出来,但是如果n很大,此时n!超出了数据的表示范围,这种直接求的方法肯定行不通。其实n!可以表示成统一的方式。

n!=(k^m)*(m!)*a   其中k是该因子,m=n/k,a是不含因子k的数的乘积

下面推导这个公式

n!=n*(n-1)*(n-2)*......3*2*1

   =(k*2k*3k.....*mk)*a      a是不含因子k的数的乘积,显然m=n/k;

   =(k^m)*(1*2*3...*m)*a

   =k^m*m!*a

接下来按照相同的方法可以求出m!中含有因子k的个数。

因此就可以求除n!中因子k的个数

int count(int n,int k)
{
    int num=0;
    while(n)
    {
        num+=n/k;
        n/=k;
    }
    return num;
}

 

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)求出因子个数

因子和与因子个数

标签:

原文地址:http://www.cnblogs.com/zhangmingcheng/p/4241349.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!