2859 - 【设计型】第11章:指针和数组 因子和阶乘

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 128 MB

输入正整数n(2<=n<=100),把阶乘n! = 123...n分解成素因子相乘的形式,从小到大输出各个素数(2、3、5....)的指数。例如:825 = 355*11应表示成(0,1,2,0,1)分别表示有0、1、2、0、1个2、3、5、7、11。你的程序应该忽略比最大素因子更大的素数(否则末尾会有无穷多个0)。

题目输入

第一行输入n,(2<=n<=100)

题目输出

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

<br />

(注意空格,并且在输出一行后输出回车)

输入/输出样例

输入格式

53

输出格式

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

C语言解答

#include<stdio.h>
#include<string.h>

int is_prime(int n)
{
	for(int i = 2; i*i <= n; i++)
	{
		if(n % i == 0) 
		{
			return 0;
		}
	}
	return 1;
} 

int prime[100], count = 0;

int main()
{
	int n, p[100];
	for(int i = 2; i <= 100; i++)
	{
		if(is_prime(i)) prime[count++] = i;
	}
	scanf("%d", &n);
	printf("%d! = ", n);
	memset(p, 0, sizeof(p));
	int maxp = 0;
	for(int i = 1; i <= n; i++)
	{
		int m = i;
		for(int j = 0; j < count; j++)
		{
			while(m % prime[j] == 0)
			{
				m /= prime[j];
				p[j]++;
				if(j > maxp) maxp = j;
			}
		}
	}
	for(int i = 0; i <= maxp; i++)
	{
		printf(" %d", p[i]);
	}
	printf("\n");
	return 0;
}