n的阶乘分解成素数幂的积

题目描述:

 

题目分析:对于某个阶乘,每个乘积因子总能被一些有小到大的素数除至1,,总体上表现为某个阶乘总能由一些由小到大的素数的幂的积表示。这样我们的目的就到到了

代码展示:

 1 //阶乘素数分解
 2 #include<stdio.h>
 3 #include<string.h>
 4 int prime[100],p[100];
 5 
 6 int is_prime(int x)
 7 {
 8     int sign=1;
 9     for(int i=2;i*i<x;i++)
10     {
11         if(x%i==0)
12         {
13             sign=0;
14             break;
15         }
16     }
17     if(sign) return 1;
18     else return 0;
19 }
20 
21 int main()
22 {
23     int count=0,n;
24     for(int i=2;i<=100;i++)
25     {
26         if(is_prime(i)) prime[count++]=i;
27     }
28     while(scanf("%d",&n)==1)
29     {
30         int max=0;
31         memset(p,0,sizeof(p));       //这一步必不可少,不然会出错
32         printf("%d!=(",n);
33         for(int i=1;i<=n;i++)        //对于阶乘里出现的每个数,都能被某些从小到的的素数整除,变成1后不再管
34         {
35             for(int j=0;j<count;j++)
36             {
37                 int m=i;
38                 while(m%prime[j]==0)
39                 {
40                     p[j]++;
41                     m=m/prime[j];
42                     if(j>max) max=j;
43                 }
44             }
45         }
46         for(i=0;i<max;i++) printf(" %d",p[i]);
47         printf(")\n");
48     }
49     return 0;
50 }

运行结果(这里多了括弧):

 

posted @ 2020-04-10 11:17  kakusan  阅读(524)  评论(0编辑  收藏  举报