PAT2019春7-1 Sexy Primes (20 分)

tech2026-04-23  1

Sexy primes are pairs of primes of the form (p, p+6), so-named since “sex” is the Latin word for “six”. (Quoted from http://mathworld.wolfram.com/SexyPrimes.html)

Now given an integer, you are supposed to tell if it is a sexy prime.

Input Specification: Each input file contains one test case. Each case gives a positive integer N (≤10^8).

Output Specification: For each case, print in a line Yes if N is a sexy prime, then print in the next line the other sexy prime paired with N (if the answer is not unique, output the smaller number). Or if N is not a sexy prime, print No instead, then print in the next line the smallest sexy prime which is larger than N.

Sample Input 1: 47 Sample Output 1: Yes 41 Sample Input 2: 21 Sample Output 2: No 23

思路

这题很简单,输入一个数n,判断它是不是性感数(n和n+6或n-6都是素数)。如果是,就输出yes和与它配对的性感数,若有两个就输出小的那一个。如果不是,就输出大于它的最小的性感数。

发现一个之前没发现的错误,判断质数时,终止条件有等号!

代码

#include<stdio.h> #include<math.h> bool isprime(int x){ if(x<=1) return false; for(int i=2;i<=(int)sqrt(x);i++){ if(x%i==0) return false; } return true; } int main(){ int n; scanf("%d",&n); if(isprime(n)&&(isprime(n+6)||isprime(n-6))){ printf("Yes\n"); if(isprime(n-6)) printf("%d",n-6); else printf("%d",n+6); }else{ printf("No\n"); int x=n; //只要有一个满足就是性感数 while(!((isprime(x)&&isprime(x+6))||(isprime(x)&&isprime(x-6)))) x++; printf("%d",x); } return 0; }

 

最新回复(0)