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\n",ans); 61 } 62 }