http://poj.org/problem?id=3048
给n个数,求出其中质因数最大的数
思路:在筛素数的时候,记录每个数对应的最大质因数,在访问该数时可以以o(1)的复杂度找到它的最大质因数。再加上贪心的想法,在每次访问的时候找到当前最大质因数,并且记录该数。
#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdio>
#include <queue>
#include <algorithm>
using namespace std;
int a[200001];
void make(){
memset(a,0,sizeof(a));
a[0]=0;
a[1]=1;
for (int i=2;i<=20001;i+=2){
a[i]=2;
}
for (int i=3;i<=20001;i+=2){
if (a[i]==0){
for (int j=i;j<=20001;j+=i){
a[j]=i;
}
}
}
}
int main(){
int N;
int ans;
make();
while ((scanf("%d",&N))!=EOF){
cin >> ans;
int x;
for (int i=2;i<=N;i++){
cin >> x;
if (a[ans]<a[x]){
ans=x;
}
}
cout << ans << endl;
}
}