197. 阶乘分解
给定整数 N ,试把阶乘 N! 分解质因数,按照算术基本定理的形式输出分解结果中的 pi和 ci即可。
输入格式:
一个整数N。
输出格式:
N! 分解质因数后的结果,共若干行,每行一对pi,ci,表示含有pi^ci项。按照pi从小到大的顺序输出。
数据范围:
1≤N≤10^6
输入样例:
5
输出样例:
2 3
3 1
5 1
样例解释
5!=120=2^3∗3∗5
思路:先将100万以内的质数存起来,然后每个判断。AC代码:
#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
struct point{
int ans,cnt;
};
int n;
bool a[1000010];
int b[1000010];
int dp[1000010];
int f(){
memset(a,0,sizeof(a));
int k=0;
for(int i=2;i<1000010;i++){
for(int j=2;i*j<1000010;j++) a[i*j]=1;
}
for(int i=2;i<1000010;i++){
if(a[i]==0) b[k++]=i;
}
return k;
}
int main(){
int k=f();
scanf("%d",&n);
int x;
memset(dp,0,sizeof(dp));
for(int i=2;i<=n;i++){
int u=i;
x=0;
while(u){
if(a[u]==0 || u==1){
dp[u]++;
break;
}
while(u%b[x]!=0) x++;
while(u%b[x]==0){
dp[b[x]]++;
u/=b[x];
}
}
}
for(int i=0;i<k;i++){
if(dp[b[i]]>0){
printf("%d %d\n",b[i],dp[b[i]]);
}
}
return 0;
}