计算n!中含有多少个质因子p
点击查看代码
#include<cstdio>
#pragma warning(disable:4996)
//非递归计算n!中含有多少个质因子p
int cal(int n, int p) {
int ans = 0; //记录p的总个数
//当n为0时结束
while (n) {
ans += n / p; //ans=n/p+n/p^2+n/p^3+...
n /= p; //下一轮的n变为n/p
}
return ans;
}
//递归计算n!中含有多少个质因子p
int cal(int n, int p) {
if (n < p) return 0; //n<p时1~n中没有质因子p,个数为0
return n / p + cal(n / p, p); //n>=p时,等于1~n中p的倍数的个数n/p,再加上(n/p)!中质因子p的个数
}