poj3048--Max Factor(最大素数因子)
通过素数筛选,加输入时判断,效率不是很高
View Code
1 //Accepted 212K 204MS C++ 967B 2 #include <cstdio> 3 #include <memory.h> 4 #include <algorithm> 5 using namespace std; 6 const int MAXN = 5001, MAXM = 20001,MAXPRIME=2262; 7 bool is_prime[MAXM]; 8 int prime[MAXPRIME]; 9 int ans[MAXN]; 10 void init_prime(void) 11 { 12 int i, j; 13 fill(is_prime, is_prime + MAXM, true); 14 for(is_prime[1] = false, i = 2; i * i <= MAXM; ++i) 15 { 16 if(is_prime[i]) 17 { 18 for(j = i + i; j <= MAXM; j += i) 19 is_prime[j] = false; 20 } 21 } 22 } 23 void get_prime(void) 24 { 25 int len = 0; 26 for(int i=2;i<MAXM;i++) 27 if(is_prime[i]) 28 prime[len++] = i; 29 } 30 int main(void) 31 { 32 init_prime(); 33 get_prime(); 34 int t,maxx,i,n,j,result; 35 while(scanf("%d",&n)==1) 36 { 37 maxx = -1; 38 for(i=0;i<n;i++) 39 { 40 scanf("%d",&ans[i]); 41 t = 1; 42 for(j=0;j<MAXPRIME;j++) 43 { 44 if(prime[j] > ans[i]) break; 45 if(ans[i]%prime[j] == 0) t = j; 46 } 47 if(maxx < prime[t]) 48 { 49 maxx = prime[t]; 50 result = ans[i]; 51 } 52 } 53 printf("%d\n",result); 54 } 55 return 0; 56 }


浙公网安备 33010602011771号