poj3048 Max Factor

题意:求质因子最大的数

思路:线性筛打表即可

 1 #include<iostream>
 2 #include<string.h>
 3 using namespace std;
 4 const int maxn = 20000+10;
 5 bool vis[maxn];
 6 int prime[maxn];
 7 int a[5010],ma[5010];
 8 int cnt;
 9 void f(int n)//计算从1到n的素数个数
10 {
11     memset(vis,false,sizeof(vis));
12     for(int i=2;i<=n;i++)
13     {
14         if(!vis[i])prime[cnt++] = i;
15         for(int j=0;j<cnt && i*prime[j]<=n;j++)
16         {
17             vis[i*prime[j]]=true;
18             if(i%prime[j]==0)break;
19         }
20     }
21 }
22 
23 int main ()
24 {
25     f(20000);
26     int n;cin>>n;
27     for(int i=0;i<n;i++){
28         cin>>a[i];
29         int x=a[i];
30         for(int j=0;j<cnt;j++){
31             if(x%prime[j]!=0)continue;
32             ma[i]=prime[j];
33             while(x%prime[j]==0)x/=prime[j];
34             if(x==1)break;
35         }
36     }
37     int ans=0;
38     for(int i=1;i<n;i++) if(ma[i]>ma[ans])ans=i;
39     cout<<a[ans]<<endl;
40     return 0;
41 }
View Code

 

posted @ 2019-10-19 16:26  ljy3268  阅读(112)  评论(0编辑  收藏  举报