背景 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> |
05 | using namespace std; |
06 | #define N 10010 |
07 | long long f[N]; |
08 | long long sushu( long long x); |
09 | int 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 |
39 | long 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 | } |