1156 Sexy Primes (20 分)
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 (≤108).
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 Nis 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
经验总结:
emmmmm 简单的划水题,不过要读清楚题目意思。
p如果是sexy prime,那么可以先判断p-6是不是,如果p-6是,直接输出p-6,如果不是,再输出p+6
p如果不是sexy prime,那就从这个数往后一直加,直到出现一个数p为sexy prime为止,即(p和p-6均为prime或者p与p+6均为prime)
就这么多啦~
AC代码
#include <cstdio>
#include <cmath>
bool isprime(int n)
{
if (n <= 1)
return false;
int sqr = (int)sqrt(n*1.0);
for (int i = 2; i <= sqr; ++i)
{
if (n%i == 0)
return false;
}
return true;
}
int main()
{
int n;
scanf("%d", &n);
if (isprime(n)&&isprime(n - 6))
printf("Yes\n%d\n", n - 6);
else if (isprime(n)&&isprime(n + 6))
printf("Yes\n%d\n", n + 6);
else
{
while (!(isprime(n) && isprime(n - 6)) && !(isprime(n) && isprime(n + 6)))
++n;
printf("No\n%d\n", n);
}
return 0;
}