2859 - 【设计型】第11章:指针和数组 因子和阶乘
输入正整数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; }