题目描述
对 N! 进行质因子分解。
输入格式
输入数据仅有一行包含一个正整数 N,N≤10000。
输出格式
输出数据包含若干行,每行两个正整数p,a,中间用一个空格隔开。表示N! 包含 a 个质因子 p,要求按 p 的值从小到大输出。
#include<iostream>
#include<cmath>
using namespace std;
bool isPrime(int x){
if(x==2) return true;
for(int i=2;i<=sqrt(x);i++){
if(x%i==0) return false;
}
return true;
}
int main(){
int n;
cin>>n;
int a[n+1]={0};
for(int i=2;i<=n;i++){
if(isPrime(i)) a[i]++;
else{
//分解i为多个质数相乘
int k=i;
while(k!=1){
for(int j=2;j<=k;j++){
if(k%j==0&&isPrime(j)){
a[j]++;
k=k/j;
break;
}
}
}
}
}
for(int i=2;i<=n;i++){
if(a[i]!=0) cout<<i<<' '<<a[i]<<endl;
}
return 0;
}