数论,质因数分解

题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=88159#problem/J

题意:

       多组案例,以输入一个负数结束。每组案例给出一个数n,将其质因数分解。例如下述案例中 60=2^2*3^1*5^1 。
案例:

       Sample Input

       60

       12

       -1

       Sample Output

       Case 1.

       2 2 3 1 5 1

    

       Case 2.
       2 2 3 1

分析:

       该题与之前发布的判断美素数类似,稍作修改即可。不过这题需要注意其输入输出格式,因为格式问题,我提交错误了3次。

源代码:

 1 #include<cstdio>
 2 #include<cmath>
 3 #include<cstring>
 4 int n,k;
 5 int prime[65540],a[65540];
 6 void judge_prime()
 7 {
 8     int s,t,m;
 9     m=int(sqrt(65540));
10     prime[0]=prime[1]=1;
11     for(s=2;s<=m;s++)
12         if(!prime[s])
13             for(t=s*s;t<=65540;t+=s)
14                 prime[t]=1;
15 }
16 void search()
17 {
18     int cnt;
19     k=1;
20     for(int i=2;i<=n;i++)
21     {
22         if(!prime[i])
23             if(n%i==0)
24             {
25                 a[k]=i;
26                 cnt=1;
27                 n=n/i;
28                 while(n%i==0)
29                 {
30                     ++cnt;
31                     n=n/i;
32                 }
33                 a[++k]=cnt;
34                 k++;
35             }
36     }
37 }
38 int main()
39 {
40     int ans=0;
41     memset(prime,0,sizeof(prime));
42     judge_prime();
43     while(scanf("%d",&n)&&n>0)
44     {
45         if(ans) printf("\n");//注意!there is a blank line between outputs. 
46         memset(a,0,sizeof(a));
47         search();
48         printf("Case %d.\n",++ans);
49         for(int j=1;j<k;j++)
50             printf("%d ",a[j]);//每个数字后都有一个空格,包括最后一个数字
51         printf("\n");
52     }
53     return 0;
54 }

 

posted @ 2015-08-20 19:30  ~瞬间*  阅读(417)  评论(0编辑  收藏  举报