计蒜客 难题题库 219 最大质因数

给出N个数字,试求质因数最大的数字。

输入格式:

第一行,一个整数N,表示数字个数。 接下来N行,每行一个整数A_i,表示给出的数字。

输出格式:

一个整数,表示质因数最大的数字。

N  < =  5000  ,  A_i  < =  20000

举例 

38和12

38=19*2, 12=2*3*3, 38最大的是19 12最大的是3, 所以本数据要输出38。

样例1

输入:

4
36
38
40
42

输出:

38


#include<iostream>
using namespace std;

const int maxn = 20001;
bool isPrime[maxn];

void init(){
    isPrime[2] = 1;
    int i;
    for(i = 3; i < maxn; i += 2){
        isPrime[i] = 1;
    }
    int j;
    for(i = 3; i < maxn; ++i){
        if(isPrime[i]){
            for(j = i * 2; j < maxn; j += i){
                isPrime[j] = 0;
            }
        }
    }
}

int max_prime_factor(int n){
    for(int i = n; i >= 2; --i){
        if(isPrime[i] && n % i == 0){
            return i;
        }
    }
    return 0;
}

int main(){
    init();
    int n, a, temp;
    cin >> n;
    int max_val = -1, res = 0;
    while(n--){
        cin >> a;
        if(max_val < (temp = max_prime_factor(a))){
            max_val = temp;
            res = a;
        }
    }
    cout << res << endl;
}


你可能感兴趣的:(OJ,计蒜客)