您的位置:首页 > 编程语言 > C语言/C++

蓝桥杯 - 因子和阶乘 C语言实现

2017-03-29 16:19 239 查看
因子和阶乘

题目:

输入正整数n(2=<n<=100),把阶乘n!=1*2*3*4*5*6*7*....*n 分解成素因子相乘的形式,从小大大输出各个素数(2,3,5,7.....)的指数,如825=3*5^2*11应表示成(0,1,2,0,1),表示分别有0,1,2,0,1,个2、3、5、7、11.你的程序应忽略比最大素因子更大的素数

样例输入:

5

53

样列输出:

5!=3 1 1

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

分析:
先获取100内的质数存储到prime[ ],对1*2*3*...n这1,2,3...n个数进行计算质数的倍数存储到p[ ]中同时记录最大的p[ i ]中的i值后面输出。

代码在此:
#include<stdio.h>
#include<string.h>

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

int prime[100];
int count = 0;

int main () {

int i, j;
int n;
int p[100];

for(i = 2; i <= 100; i ++){
if(is_prime(i))
prime[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){
m /= prime[j];
p[j] ++;
if(j > maxp)
maxp = j;
}
}
}
for(i = 0; i <= maxp; i ++)
printf(" %d", p[i]);
printf("\n");
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: