分析
多重集组合数。对于给定 $n$ 个物品,一共有 $k$ 个,$m$ 种,每种个数对应为 $n_1, n_2, n_3,…,n_m$ ,那么这些物品全排列数目为 $\frac{n!}{n_1!n_2!…n_m}$
C++ 代码
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
typedef long long ll;
const int N = 1024;
int n;
ll f[N];
int main()
{
f[0] = 1;
for (int i = 1; i <= 20; i++)
{
f[i] = f[i - 1] * i;
}
while (~scanf("%d", &n))
{
ll len = 0, sum = 1;
for (int i = 2; i * i <= n; i++)
{
int cnt = 0;
if (n % i == 0)
{
while (n % i == 0)
{
n /= i;
cnt++;
}
len += cnt;
sum *= f[cnt];
}
}
if (n > 1) len++;
cout << len << " " << f[len] / sum << endl;
}
return 0;
}
%%%
因为这个就已经复现了上面的那个算式,len代表有多少个因子,f[len]存的是len!,sum存的是每个质因子的阶乘,
这个没有筛法求素数怎么也能过?