“性感素数”是指形如 (p, p+6) 这样的一对素数。之所以叫这个名字,是因为拉丁语管“六”叫“sex”(即英语的“性感”)。(原文摘自 http://mathworld.wolfram.com/SexyPrimes.html)
现给定一个整数,请你判断其是否为一个性感素数。
输入格式:
输入在一行中给出一个正整数 N (≤108)。
输出格式:
若 N 是一个性感素数,则在一行中输出 Yes
,并在第二行输出与 N 配对的另一个性感素数(若这样的数不唯一,输出较小的那个)。若 N 不是性感素数,则在一行中输出 No
,然后在第二行输出大于 N 的最小性感素数。
输入样例 1:
47
样例-1:">输出样例 1:
Yes 41
输入样例 2:
21
输出样例 2:
No 23
代码实现:
import java.io.*; /** * @author yx * @date 2022-07-27 17:02 */ public class Main { static PrintWriter out=new PrintWriter(System.out); static BufferedReader ins=new BufferedReader(new InputStreamReader(System.in)); static StreamTokenizer in=new StreamTokenizer(ins); public static void main(String[] args) throws IOException { in.nextToken(); int N=(int) in.nval; /* 讲一下下面这个注释部分为什么会报错, */ // if(isPrime(N)){ // if(isPrime(N-6)){ // System.out.println("Yes"); // System.out.println(N-6); // return; // } // if(isPrime(N+6)){ // System.out.println("Yes"); // System.out.println(N+6); // } // }else { // for (int i = N+1; ; i++) { // if(isPrime(i)&&(isPrime(i-6) || isPrime(i+6))){ // System.out.println("No"); // System.out.println(i); // break; // } // } // } // } if(isPrime(N) && (isPrime(N-6)||(isPrime(N+6)))){ if(isPrime(N-6)){ System.out.println("Yes"); System.out.println(N-6); }else { System.out.println("Yes"); System.out.println(N+6); } }else { for (int i = N+1; ; i++) { if(isPrime(i)&&(isPrime(i-6) || isPrime(i+6))){ System.out.println("No"); System.out.println(i); break; } } } } static boolean isPrime(int n){ if(n<2){//有可能(n-6)为负数,这个地方特判一下 return false; } for (int i = 2; i*i<=n ; i++) { if(n%i==0)return false; } return true; } }
编辑