题意:求质因子最大的数
思路:线性筛打表即可
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 }
参与评论
手机查看
返回顶部