To improve the organization of his farm, Farmer John labels each of his N (1 <= N <= 5,000) cows with a distinct serial number in the range 1..20,000. Unfortunately, he is unaware that the cows interpret some serial numbers as better than others. In particular, a cow whose serial number has the highest prime factor enjoys the highest social standing among all the other cows.
(Recall that a prime number is just a number that has no divisors except for 1 and itself. The number 7 is prime while the number 6, being divisible by 2 and 3, is not).
Given a set of N (1 <= N <= 5,000) serial numbers in the range 1..20,000, determine the one that has the largest prime factor.
(Recall that a prime number is just a number that has no divisors except for 1 and itself. The number 7 is prime while the number 6, being divisible by 2 and 3, is not).
Given a set of N (1 <= N <= 5,000) serial numbers in the range 1..20,000, determine the one that has the largest prime factor.
Input* Line 1: A single integer, N
* Lines 2..N+1: The serial numbers to be tested, one per lineOutput* Line 1: The integer with the largest prime factor. If there are more than one, output the one that appears earliest in the input file.Sample Input
4 36 38 40 42
Sample Output
38
1 /* 2 Name: WTZPT 3 Copyright: 4 Author: 5 Date: 14/08/17 11:13 6 Description: 先输入数字的个数n,然后n次输入数字,输出其中拥有最大素数因子的数字 7 */ 8 #include<bits/stdc++.h> 9 using namespace std; 10 const int MAX = 50005; 11 int prime[MAX],temp[MAX]; 12 void init() 13 { 14 memset(temp,1,sizeof(temp)); 15 for(int i = 2; i < MAX; i++) /*先建立一个素数表*/ 16 if(temp[i]) 17 { 18 temp[i] = 1; //素数 19 for(int j = i*2; j < MAX; j+=i) 20 temp[j] = 0; //非素数 21 } 22 23 prime[1] = 1; //素数 24 int count = 2; 25 for(int i = 2; i < MAX; i++) /*把素数存储到一个容器内*/ 26 { 27 if(temp[i]) 28 prime[count++] = i; 29 } 30 31 } 32 int main() 33 { 34 init(); 35 int t,ans,max; 36 while(cin>>t) 37 { 38 max = 0; 39 memset(temp,0,sizeof(temp)); 40 for(int i = 1; i<= t; i++) 41 scanf("%d",&temp[i]); 42 43 for(int i = 1; i <= t; i++) /*对每个输入的数进行处理*/ 44 for(int j = 1; prime[j] <= temp[i]; j++) /*二营长,把老子的意大利炮拉出来*/ 45 if(temp[i] % prime[j] == 0) /*应题目要求 因子为素数的情况*/ 46 if(max < prime[j]) /*当目前的素数因子最大时*/ 47 { 48 max = prime[j]; 49 ans = i; /*存储原数据的位置*/ 50 } 51 cout<<temp[ans]<<endl; 52 } 53 return 0; 54 }