题目描述
给定一个长度为N(0< n< =10000)的序列,保证每一个序列中的数字a[i]是小于max long int的非负整数 ,编程要求求出整个序列中第k大的数字减去第k小的数字的值m,并判断m是否为质数。(0< k< =n)
本题 考查:排序,因为数据量较大,建议使用效率较高的排序
素数的判断,素数的特征
源代码
#include <bits/stdc++.h>
using namespace std;
typedef vector<int> elemt_type;
elemt_type vect;
int main()
{
int n,k;
cin>>n>>k;
{
elemt_type::value_type value;
for(int i=0;i<n;i++)
{
cin>>value;
vect.push_back(value);
}
}
sort(vect.begin(),vect.end());
elemt_type::value_type m =*(vect.end()-k) - *(vect.begin()+k-1);
for(int j = 2;j*j<=abs(m);j++)//注意这里 k的位置可能超过百分之五十 导致m值为负值
{
if(m%j==0)
{
cout<<"NO"<<endl<<m<<endl;
return 0;
}
}
cout<<"YES"<<endl<<m<<endl;
return 0;
}