题目描述
给定整数 N(1≤N≤10^6),试把阶乘 N! 分解质因数,按照算术基本定理的形式输出分解结果中的
解题思路
将1~n依次分解,放入bk数组统计素数的个数
#include <bits/stdc++.h>
using namespace std;
int bk[1000010];
int main(){
int n;
cin>>n;
for(int i=2;i<=n;i++){
//将1至n阶乘的乘积依次分解
int x=i;
for(int j=2;j*j<=x;j++){
//从2开始分解这个数
while(x%j==0){
x/=j;
bk[j]++;
}
}
//这里只有两种情况
//1、x=1表示被某个数刚好分解完
//2、sqrt(x)到x之间的唯一落网之鱼
if(x!=1)
bk[x]++;
}
for(int i=2;i<=n;i++)
if(bk[i])
cout<<i<<" "<<bk[i]<<endl;
return 0;
}