“性感素数 ”、指形如 (p,p+6)(p,p+6) 这样的一对素数。
之所以叫这个名字,是因为拉丁语管“六”叫“sex”(即英语的“性感”)。
现给定一个整数,请你判断其是否为一个性感素数。
输入格式
输入在一行中给出一个正整数 NN。
输出格式
若 NN 是一个性感素数,则在一行中输出 Yes
,并在第二行输出与 NN 配对的另一个性感素数(若这样的数不唯一,输出较小的那个)。
若 NN 不是性感素数,则在一行中输出 No
,然后在第二行输出大于 NN 的最小性感素数。
数据范围
1≤N≤1081≤N≤108
输入样例1:
47
输出样例1:
Yes
41
本题主要思想如下:
1.设计函数进行素数判断
2.判断该数是否为性感素数,求出其和其附近大6和小于6的数是否为素数
3.若判断结果为性感素数,则输出两者符合条件的最小值
4.若判断结果不为性感素数,则进行相应的查找,找出大于其的最下性感素数
代码如下:
import java.util.Scanner;
public class Main{
public static void main(String [] args){
Scanner scanner = new Scanner(System.in);
//输入相应的数
int num = scanner.nextInt();
if(isSuShu(num) && isSuShu(num - 6)){
System.out.println("Yes");
System.out.println(num - 6);
}else if(isSuShu(num) && isSuShu(num + 6)){
System.out.println("Yes");
System.out.println(num + 6);
}else{
System.out.println("No");
search(num);
}
}
//判断素数
public static boolean isSuShu(int n){
if(n <= 1){
return false;
}
int temp = (int)Math.sqrt(n);
for(int i = 2; i <= temp; i++){
//若不为素数
if(n % i == 0){
return false;
}
}
//若为素数
return true;
}
//寻找大于其的最小素数
public static void search(int num){
//寻找最小素数
for(int i = num + 1; ;i++){
if(isSuShu(i) && isSuShu(i - 6) && i - 6 > num){
System.out.println(i - 6);
break;
}else if(isSuShu(i) && isSuShu(i - 6)){
System.out.println(i);
break;
}
else if(isSuShu(i) && isSuShu(i + 6)){
System.out.println(i);
break;
}
}
}
}