【POJ】3048-Max Factor 筛法求素数

来源:互联网 发布:淘宝衍生行业 编辑:程序博客网 时间:2024/06/04 23:29

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;    }}