题目描述
n!表示n的阶乘,并且有n!=1×2x…×n成立。求n!中有多少个质因子p。
这个问题是什么意思呢?举个例子,6!=1×2×3×4×5×6,于是6!中有4个质因子2,因为2、4、6中各有1个2、2个2、1个2;而6!中有两个质因子3,因为3、6中均各有1个3。
解题思路:
遍历1~n中的每个数字,各个数字有多少个p因子,然后加起来即可
//求n!中有多少个质因子p
int cal(int n, int p) {
int result = 0;
for (int i = 2; i <= n; i++) {
int temp = i;
while (temp % p == 0)
{
result++;
temp /= p;
}
}
return result;
}
第二种解法:
此方法摘抄自算法笔记
代码如下:
//求n!中有多少个质因子p
int cal(int n, int p) {
int result = 0;
while (n) {
result += n / p;//累加 n / p^k
n /= p;//相当于分母多乘了一个p
}
return result;
}
组合数的计算
计算组合数C(n,m)
下图来自于算法笔记
代码:
//组合数的计算
long long C(long long n, long long m) {
if (m == 0 || m == n) {
return 1;
}
return C(n - 1, m) + C(n - 1, m - 1);
}