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 }
posted @ 2012-09-20 17:56  Wheat″  阅读(447)  评论(0)    收藏  举报