第 K 个最小的素数分数
给你一个按递增顺序排序的数组 arr 和一个整数 k 。数组 arr 由 1 和若干 素数 组成,且其中所有整数互不相同。

对于每对满足 0 < i < j < a r r . l e n g t h 0 < i < j < arr.length 0<i<j<arr.length i i i j j j ,可以得到分数 a r r [ i ] a r r [ j ] \frac {arr[i] }{ arr[j]} arr[j]arr[i]

那么第 k 个最小的分数是多少呢? 以长度为 2 的整数数组返回你的答案, 这里 a n s w e r [ 0 ] = = a r r [ i ] answer[0] == arr[i] answer[0]==arr[i] a n s w e r [ 1 ] = = a r r [ j ] answer[1] == arr[j] answer[1]==arr[j]

示例 1:

输入:arr = [1,2,3,5], k = 3
输出:[2,5]

解释:已构造好的分数,排序后如下所示:

1/5, 1/3, 2/5, 1/2, 3/5, 2/3

很明显第三个最小的分数是 2/5

示例 2:

输入:arr = [1,7], k = 1
输出:[1,7]

提示:

2 < = a r r . l e n g t h < = 1000 2 <= arr.length <= 1000 2<=arr.length<=1000
1 < = a r r [ i ] < = 3 ∗ 104 1 <= arr[i] <= 3 * 104 1<=arr[i]<=3104
a r r [ 0 ] = = 1 arr[0] == 1 arr[0]==1
a r r [ i ] arr[i] arr[i] 是一个 素数 , i > 0 i > 0 i>0
arr 中的所有数字 互不相同 ,且按 严格递增 排序
1 < = k < = a r r . l e n g t h ∗ ( a r r . l e n g t h − 1 ) 2 1 <= k <= \frac {arr.length *(arr.length - 1) }{2} 1<=k<=2arr.length(arr.length1)

class Solution {
   

public:

    vector<int> kthSmallestPrimeFraction(vector<int>& arr, int k) {
   
        vector<pair<int, int>> a;
        for (int i = 0; i < arr.size(); ++i) {
   
            for (int j = i + 1; j < arr.size(); ++j) {
   
                a.push_back({
   arr[i], arr[j]});
            }
        }
         sort(a.begin(), a.end(), [](const auto& x, const auto& y) {
   
            return x.first * y.second < x.second * y.first;
        });
        return {
   a[k - 1].first, a[k - 1].second};
    }
};