因子和阶乘

  算法竞赛入门 P82 5.4.2 

 

题目大意: 输入正整数n , 把n! =1*2*3*……*n 分解乘素因子相乘形式,并从大到小输出各个素数的指数。

 

样例输入:

5

53

样例输出:

5!= 3 1 1

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

 

 

 1 /*
 2 算法竞赛入门经典 P82 5.4.2
 3 因子和阶乘
 4 
 5 */
 6 
 7 #include <cstdio>
 8 #include <memory.h>
 9 
10 //判断是否为素数
11 int is_prime(int n)
12 {
13     for(int i=2;i*i<=n;i++)
14     {
15         if(n%i == 0)
16         {
17             return 0;
18         }
19 
20     }
21     return 1;
22 }
23 
24 
25 
26 const int MAXN = 100;
27 int prime[MAXN];  // 素数表
28 
29 int n,p[MAXN];  // p 是各个素数的指数
30 int count=0;
31 int main()
32 {
33     for(int i=2;i<=MAXN;i++)
34     {
35         if(is_prime(i))
36         {
37             prime[count++]=i;
38         }
39     }
40 
41     while(scanf("%d",&n)==1)
42     {
43         printf("%d = ",n);
44         memset(p,0,sizeof(p));
45         int maxp=0;
46         for(int i=1;i<=n;i++)           //阶乘
47         {
48             int m=i;
49             for(int j=0;j<count;j++)
50             {
51                 while(m%prime[j] == 0)
52                 {
53                     m/=prime[j];
54                     p[j]++;
55                     if(j>maxp)maxp=j;
56                 }
57             }
58 
59         }
60         for(int i=0;i<=maxp;i++)
61         {
62             printf("%d ", p[i]);
63         }
64         printf("\n");
65 
66     }
67 
68 
69 
70     return 0;
71 }

 

posted @ 2013-10-08 21:01  doubleshik  阅读(272)  评论(0编辑  收藏  举报