/*
算出n阶乘是由多少个质数相乘得到的!
其中,n<100;
例如,5!=2^3*3*5,
则输出3,1,1
输出直到最大素数,后面的不输出
*/
#include <stdio.h>
#include <string.h>
#define MAXN 10000
int prime[MAXN]; //素数表
int count=0;
int is_prime(int n){
bool u[MAXN];
memset(u,true,sizeof(u));
memset(prime,0,sizeof(prime));
int i,su[MAXN],num=1;
int j;
memset(su,0,sizeof(su));
for(i=2;i<=n;i++){
if(u[i]) su[num++]=i;
for(j=1;j<num;j++){
if(su[j]*i>n) break;
u[su[j]*i]=false;
if(i%su[j]==0) break;
}
}
for(i=2,count=0;i<=n;i++){
if(u[i]) prime[count++]=i;
}
}
int main(){
int i,maxp;
int n,m;
int p[MAXN];
is_prime(100);
int j;
while(scanf("%d",&n)==1){
memset(p,0,sizeof(p));
maxp=0;
if(n<2&&n>=0){
printf("%d!= 1\n",n);
continue;
}
printf("%d!=",n);
for(i=2;i<=n;i++){
m=i;
for(j=0;j<count;j++){
while(m%prime[j]==0){
m/=prime[j];
p[j]++;
if(j>maxp) maxp=j;
}
}
}
for(m=0;m<=maxp;m++)
printf(" %d",p[m]);
printf("\n");
}
return 0;
}
因子和阶乘
最新推荐文章于 2019-08-02 16:04:20 发布