题目要求
输入样例
4 6 1 2 3 4 5 6
输出样例
5
方案一(借鉴的,供参考):
语言环境:Java - OpenJDK 1.7.0
import java.util.*;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.StreamTokenizer;
public class Main {
static StreamTokenizer st = new StreamTokenizer(new BufferedInputStream(System.in));
static void swap(int arr[], int a, int b) {
int tmp;
tmp = arr[a];
arr[a] = arr[b];
arr[b] = tmp;
}
static int[] v = new int[1000001];
static int partition(int arr[], int left, int right, int pivotIndex) {
int storeIndex = left;
int pivotValue = arr[pivotIndex];
int i;
swap(arr, pivotIndex, right);
for (i = left; i < right; i++) {
if (v[arr[i]] < v[pivotValue]) {
swap(arr, i, storeIndex);
storeIndex++;
} else if (v[arr[i]] == v[pivotValue] && arr[i] < pivotValue) {
swap(arr, i, storeIndex);
storeIndex++;
}
}
swap(arr, storeIndex, right);
return storeIndex;
}
static int findKMax(int arr[], int left, int right, int k) {
int nRet;
int pivotIndex = left + 1;
nRet = partition(arr, left, right, pivotIndex);
if (nRet < k) {
return findKMax(arr, nRet + 1, right, k);
} else if (nRet > k) {
return findKMax(arr, left, nRet - 1, k);
}
return nRet;
}
static int nextInt() {
try {
st.nextToken();
} catch (IOException e) {
e.printStackTrace();
}
return (int) st.nval;
}
public static void main(String args[]) {
for (int i = 1; i <= 1000; i++) {
for (int j = i + 1; j * i <= 1000000; j++) {
v[i * j] += 2;
}
v[i * i]++;
}
int k = nextInt();
int n = nextInt();
int[] t = new int[n];
for (int i = 0; i < n; ++i) {
t[i] = nextInt();
}
int r = findKMax(t,0,n - 1,k-1);
System.out.println(t[r]);
}
}