Max Factor
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6322 Accepted Submission(s): 2077
(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.
* Lines 2..N+1: The serial numbers to be tested, one per line
#include"iostream"
#include"cstdio"
#include"cstring"
using namespace std;
const int maxn = 20005;
int factor[maxn];
int isprime[maxn];
void Eratosthenes(){
memset(isprime, true, sizeof isprime);
isprime[1] = true;
for(int i = 2;i*i <= maxn;i ++){
if(!isprime[i]) continue;
for(int j = i<<1;j < maxn;j += i)
isprime[j] = false;
}
}
void MaxFactor(){ //產生各個數的最大素因子
Eratosthenes();
for(int i = 1;i < maxn;i ++)
if(isprime[i]){
for(int j = i;j < maxn;j += i)
factor[j] = i;
}
/*for(int i = 0;i < 100;i ++)
printf("%d %d\n", i, factor[i]);*/
}
int main(){
int n, t, max_factor, max_num;
MaxFactor(); //打表
while(scanf("%d", &n) != EOF){
max_factor = 0;
while(n --){
scanf("%d", &t);
if(max_factor < factor[t]){
max_factor = factor[t];
max_num = t;
}
}
printf("%d\n", max_num);
}
return 0;
}