网址如下:197. 阶乘分解 - AcWing题库
不是哥们,为了求一个火车进出栈问题,因为高精度和在高精度情况下仍然需要压位数,不得不提前学了n!的质因数分解
代码如下:
#include<cstdio>
const int maxn = 1000010;
bool is[maxn];
long long c[maxn];
void init(int x){
for(int i = 2; i < x; i++){
if(is[i]) continue;
for(int j = 2; j <= x / i; j++) is[i * j] = true;
}
}
void get_ans(int x){
for(int i = 2; i <= x; i++){
if(is[i]) continue;
for(long long j = i; j <= x; j *= i) c[i] += x / j;
}
}
int main(void)
{
int N; scanf("%d", &N);
init(N); get_ans(N);
for(int i = 2; i <= N; i++)
if(c[i]) printf("%d %lld\n", i, c[i]);
return 0;
}