p1001 --- 第K极值

  背景 Background
 成成第一次模拟赛 第一道
描述 Description
给定一个长度为N(0<n<=10000)的序列,保证每一个序列中的数字a[i]是小于maxlongint的非负整数 ,编程要求求出整个序列中第k大的数字减去第k小的数字的值m,并判断m是否为质数。(0<k<=n)
输入格式 InputFormat
输入格式:
第一行为2个数n,k(含义如上题)
第二行为n个数,表示这个序列
输出格式 OutputFormat
输出格式:
如果m为质数则
第一行为'YES'(没有引号)
第二行为这个数m
否则 
第一行为'NO'
第二行为这个数m
 
 
代码:
#include <stdio.h>
02#include <string.h>
03#include <iostream>
04#include <algorithm>
05using namespace std;
06#define N 10010
07long long f[N];
08long long sushu(long long x);
09int main()
10{
11    long long i,j,x,y,n,k;
12    while(scanf("%lld %lld",&n,&k)!=EOF)
13    {
14        for( i=0;i<n;i++)
15        {
16            scanf("%lld",&f[i]);
17        }
18        for(i=0;i<n;i++)
19            for(j=0;j<n-i-1;j++)
20                if(f[j]>f[j+1])
21                {
22                    y=f[j];f[j]=f[j+1];f[j+1]=y;
23                }
24        x=f[n-k]-f[k-1];
25        if(x<2) printf("NO\n%lld\n",x);
26        else if(x==2) printf("YES\n%lld\n",x);
27        else
28        {
29            long long flag=sushu(x);
30            if(flag) printf("YES\n");
31            else printf("NO\n");
32            printf("%lld\n",x);
33        }
34    }
35 
36    return 0;
37}
38 
39long long sushu(long long x)
40{
41    long long i,flag=1,k;
42    k=(long long)(sqrt((long double)x)+1.0);
43    for(i=2;i<k;i++)
44    {
45        if(x%i==0) {flag=0;break;}
46        else continue;
47    }
48    return flag;
49}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值