因子和階乘

  輸入正整數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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章