可以参考卡特兰数相关计算:方法参考 129火车进栈问题。 https://www.acwing.com/problem/content/description/131/
C++ 代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6;
int co,primes[N],num;
bool st[N];
void p(int n) //线性筛质数
{
for(int i=2;i<=n;i++)
{
if(!st[i]) primes[co++]=i;
for(int j=0;primes[j]<=n/i;j++)
{
st[i*primes[j]]=true;
if(i%primes[j]==0) break;
}
}
}
int calc(int n,int p) //计算阶乘中一个质数的个数
{
int s=0;
while(n)
{
s+=n/p;
n/=p;
}
return s;
}
int main()
{
int n; cin>>n;
p(n);
for(int i=0;i<co;i++)
{
int p = primes[i];
num=calc(n,p);
printf("%d %d\n",p,num);
}
return 0;
}