求n!中含有某个因子个数的方法

简介:

 求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;
}
复制代码

练习题目:http://poj.org/problem?id=3219


本文转载自海 子博客园博客,原文链接:http://www.cnblogs.com/dolphin0520/archive/2011/04/11/2012891.html如需转载自行联系原作者


相关文章
|
8月前
|
算法
7-6 连续因子
7-6 连续因子
61 0
|
8月前
|
算法 BI 测试技术
【唯一分解定理 数学】1808好因子的最大数目
【唯一分解定理 数学】1808好因子的最大数目
|
存储 算法 索引
算法 | 100000 个数的求和只需要 O(1),可能吗?
算法 | 100000 个数的求和只需要 O(1),可能吗?
116 0
算法 | 100000 个数的求和只需要 O(1),可能吗?
|
Java
如何计算线程数的最优值?——咱有公式
如何计算线程数的最优值?——咱有公式
242 0
如何计算线程数的最优值?——咱有公式
01:判断数正负
01:判断数正负
124 0
L1-006 连续因子 (20 分)
L1-006 连续因子 (20 分)
144 0
7-8 连续因子 (20 分)
7-8 连续因子 (20 分)
117 0
输出2000-3000之间所有十位数是m且是n的倍数的数的个数
输出2000-3000之间所有十位数是m且是n的倍数的数的个数
126 0
获取一个数的各个质数因子
这个题用到了题目的知识点,记录一下吧。 假设s和m初始化,s = "a"; m = s; 再定义两种操作,第一种操作: m = s; s = s + s; 第二种操作: s = s + m; 求最小的操作步骤数,可以将...
2086 0