题目描述
给定一个长度为N(0< n< =10000)的序列,保证每一个序列中的数字a[i]是小于maxlongint的非负整数,编程要求求出整个序列中第k大的数字减去第k小的数字的值m,并判断m是否为质数。(0<k<=n)
输入格式
第一行为2个数n,k(含义如上题) 第二行为n个数,表示这个序列
输出格式
如果m为质数则 第一行为'YES'(没有引号) 第二行为这个数m 否则 第一行为'NO' 第二行为这个数m
样例输入
5 2 1 2 3 4 5
样例输出
YES 2
#include<stdio.h>
#include "math.h"
int n[10005];
void f1(int num){
int i, j,temp;
for (i = 1; i <= num-1; i++)
{
for (j = 0; j <= num-1 - i; j++)
{
if (n[j] < n[j + 1])
{
temp = n[j];
n[j] = n[j + 1];
n[j + 1] = temp;
}
}
}
}
int f(int m){int i,j;
if(m==1) return 1;
j=(int)sqrt(m);
for(i=2;i<=j;i++)
{
if(m%i==0)
{
return 1;
}
}
return 0;
}
int main()
{int i,j,num,k;
scanf("%d %d",&num,&k);
for(i=0;i<num;i++)
{
scanf("%d",&n[i]);
}
f1(num);
//printf("%d",n[k-1]-n[num-k]);
if(f(n[k-1]-n[num-k])||n[k-1]-n[num-k]<2)
printf("NO\n%d",n[k-1]-n[num-k]);
else
printf("YES\n%d",n[k-1]-n[num-k]);
return 0;
}

















