hdu 1164 Eddy's research I 解题

题意是给一个数字,让你把它的质数因子输出。

这个很简单,直接素数打表后一个一个试就行。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cstdlib>
 5 #include<algorithm>
 6 #include<queue>
 7 #include<vector>
 8 #include<stack>
 9 #include<map>
10 #include<set>
11 #include<cmath>
12 #include<cctype>
13 #include<ctime>
14 
15 using namespace std;
16 
17 bool visit[101000];
18 int prime[100000];
19 
20 void init_prim()        //高效素数打表 
21 {
22     memset(visit,true,sizeof(visit));
23     int num=0;
24     for(int i=2;i<=65535;++i)
25     {
26         if(visit[i]==true)
27         {
28             num++;
29             prime[num]=i;
30         }
31         for(int j=1;((j<=num)&&(i*prime[j]<=65535));++j)
32         {
33             visit[i*prime[j]]=false;
34             if(i%prime[j]==0) break;
35         }
36     }
37 }
38 
39 int main()
40 {
41     memset(prime,0,sizeof(prime));
42     int count=0;
43     init_prim();
44     int n;
45     while(scanf("%d",&n)!=EOF)
46     {
47         int m=1;
48         for(int i=0;i<6542;i++)
49         {
50             if(n%prime[m]!=0) m++;
51             else
52             {
53                 printf("%d",prime[m]);        //先弹出一个 
54                 n/=prime[m];
55                 break;
56             }
57         }
58         for(int i=0;i<6542;i++)
59         {
60             if(n%prime[m]!=0) m++;
61             else
62             {
63                 printf("*%d",prime[m]);        //然后依次弹出*和数字 
64                 n/=prime[m];
65             }
66             if(n<prime[m]) break;
67         }
68         printf("\n");
69     }
70     return 0;
71 }

 

posted @ 2017-08-04 11:28  丿月华丶唯少  阅读(85)  评论(0编辑  收藏  举报