题目链接: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(" ");//注意!there is a blank line between outputs. 46 memset(a,0,sizeof(a)); 47 search(); 48 printf("Case %d. ",++ans); 49 for(int j=1;j<k;j++) 50 printf("%d ",a[j]);//每个数字后都有一个空格,包括最后一个数字 51 printf(" "); 52 } 53 return 0; 54 }