题目描述
“性感素数 ”是指形如 (p,p+6) 这样的一对素数。
之所以叫这个名字,是因为拉丁语管“六”叫“sex”(即英语的“性感”)。
现给定一个整数,请你判断其是否为一个性感素数。
输入格式
输入在一行中给出一个正整数 N。
输出格式
若 N 是一个性感素数,则在一行中输出 Yes,并在第二行输出与 N 配对的另一个性感素数(若这样的数不唯一,输出较小的那个)。
若 N 不是性感素数,则在一行中输出 No,然后在第二行输出大于 N 的最小性感素数。
数据范围
1≤N≤108
样例
输入样例1:
47
输出样例1:
Yes
41
输入样例2:
21
输出样例2:
No
23
Java 代码
import java.util.Scanner;
import java.math.BigDecimal;
public class Main{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
if(is_sexPrimeNumber(N)){
System.out.println("Yes");
if(is_sexPrimeNumber(N-6)){
System.out.println(N-6);
}else{
System.out.println(N+6);
}
}else{
System.out.println("No");
for(int i = N + 1;;i++){
if(is_sexPrimeNumber(i)){
System.out.println(i);
System.exit(0);
}
}
}
}
//判断是否为素数
public static boolean is_primeNumber(int n){
if(n<2) return false;
for(int i = 2;i <= Math.sqrt(n);i++){
if(n%i==0){
return false;
}
}
return true;
}
//判断是否为性感素数
public static boolean is_sexPrimeNumber(int n){
if(is_primeNumber(n)&&(is_primeNumber(n-6)||is_primeNumber(n+6))) return true;
else return false;
}
}