题目描述
给定整数 N(1≤N≤10^6),试把阶乘 N! 分解质因数,按照算术基本定理的形式输出分解结果中的 p_i 和 c_i 即可。
输入描述
一个整数N。
输出描述
N! 分解质因数后的结果,共若干行,每行一对pi, ci,表示含有pi^ci项。按照pi从小到大的顺序输出。
样例
输入
5
输出
2 3 3 1 5 1
AC:
#include<bits/stdc++.h>
#define z int
using namespace std;
z n,vis[10050000]={1,1},prime[10005000],cnt=0,sum[10050000]={0};
void ola(){
for(int i=2;i<=n;i++){
if(vis[i]==0)prime[++cnt]=i;
for(int j=1;i*prime[j]<=n;j++){
vis[i*prime[j]]=1;
if(i%prime[j]==0)break;
}
}
}
int main(){
cin>>n;
ola();
for(int i=2;i<=n;i++){
for(int j=1;j<=cnt;j++){
sum[j]+=i/prime[j];
}
}for(int i=1;i<=cnt;i++){
cout<<prime[i]<<" "<<sum[i]<<endl;
}
return 0;
}