輸入正整數n(2<=b<=100),把階乘n!=1*2*3*4*...*n分解成素因子相乘的形式,從小到大輸出各個素數(2、3、5...)的指數。例如825=3*5(2)*11應表示成(0,1,2,0,1),表示分別有0,1,2,0,1個2,3,5,7,11.你的程序應忽略比最大素因子更大的素數(否則末尾會有無窮多個0)。
樣例輸入:5 53
樣例輸出:5!=3 1 1 53!=49 23 12 8 4 4 3 2 2 1 1 1 1 1 1 1
代碼:
#include <stdio.h>
#include <string.h>
#define MAX 1000
int prime[MAX],count=0;
int f(int n)
{
int i;
for(i=2;i*i<=n;i++)
{
if(n%i==0)
return 0;
}
return 1;
}
int main()
{
int n,p[MAX];
int i,j,maxp,m;
//1.建立一個素數表
for(i=2;i<=100;i++)
{
if(f(i))
{
prime[count]=i;
count ++;
}
}
//2.輸入n
while (scanf("%d",&n)==1)
{
printf("%d!=",n);
maxp=0;
memset(p,0,sizeof(p));
//3.把i複製到變量m中,不要做除法時直接修改
for(i=1;i<=n;i++)
{
m=i;
for(j=0;j<count;j++)
{
while(m%prime[j]==0)
{
m=m/prime[j];
p[j]++;
if(j>maxp) maxp=j;//更新最大因子的下標
}
}
}
//4.輸出
for(i=0;i<=maxp;i++)
{
printf(" %d",p[i]);
}
printf("\n");
}
return 0;
}