因子和阶乘

要求:

          输入正整数n,(2<=n<=100)把阶乘分解成素数因子相乘的形式,从小到大输出各个素数的指数。

sample input:

5

23

sample output:

5!=3 1 1

53!=49 23 12 8 4 4 3 2 2 1 1 1 1 1 1 1

code:

View Code
#include<stdio.h>
#include<string.h>
//素数判定
int isprime(int n)
{
if(i%2==0&&i!=2)
return 0;
for(i=2;i*i<=n;i++)
if(n%i==0)
return 0;
return 1;
}
//素数表
int prime[100],count=0;
int main()
{
//n和各个素数的指数
int n,i,j,p[100];
for(i=2;i<=100;i++)
if(isprime(i))
p[count++]=i;
while(scanf("%d",&n)==1)
{
printf("%d! =",n);
memset(p,0,sizeof(p));
int maxp=0;
for(i=1;i<=n;i++)
{
int m=i;
for(j=0;j<=count;j++)
while(m%prime[j]==0)//反复除以prime[j],并累加p[j]
{
m/=prime[j];
p[j]++;
if(j>maxp)
maxp=j;//更新最大素数因子下标
}
}
for(i=0;i<=maxp;i++)
printf(" %d",p[i]);
putchar('\n');
}
return 0;
}



posted @ 2012-04-06 16:53  'wind  阅读(220)  评论(0编辑  收藏  举报