HDU2710-Max Factor-分解质因子

给出N个MAXN以内的不同的数,求出素因子最大的数。

使用朴素的方法分解素因子即可。时间复杂度为N*log(MAXN)

 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <cstring>
 4 
 5 using namespace std;
 6 
 7 const int maxn = 20100;
 8 int N,save[5010];
 9 int prime[maxn];
10 
11 void init()
12 {
13     for(int i=2;i<=maxn;i++)
14     {
15         if(!prime[i]) prime[++prime[0]] = i;
16         for(int j=1;j<=prime[0]&&prime[j]<=maxn/i;j++)
17         {
18             prime[prime[j]*i] = 1;
19             if(i%prime[j]==0) break;
20         }
21     }
22 }
23 
24 int getFactors(int x)
25 {
26     int tmp = x;
27     int ans = 0;
28     for(int i=1;prime[i]<=tmp/prime[i];i++)
29     {
30         if(tmp%prime[i] == 0)
31         {
32             ans = max(ans,prime[i]);
33             while(tmp%prime[i] == 0)
34             {
35                 tmp/=prime[i];
36             }
37         }
38     }
39     if(tmp != 1)
40     {
41         ans = max(ans,tmp);
42     }
43     return ans;
44 }
45 
46 int main()
47 {
48     init();
49     int ans,mxp;
50     while(~scanf("%d",&N))
51     {
52         ans=0;mxp=0;
53         for(int i=0;i<N;i++)
54         {
55             scanf("%d",&save[i]);
56             int p = getFactors(save[i]);
57             if(p > mxp) {ans = save[i];mxp = p;}
58         }
59         if(ans == 0) ans = 1;
60         printf("%d
",ans);
61     }
62 }
原文地址:https://www.cnblogs.com/helica/p/5197902.html