欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > PAT 1156 Sexy Primes(20分)

PAT 1156 Sexy Primes(20分)

2025/5/6 22:56:58 来源:https://blog.csdn.net/cwtnice/article/details/140961950  浏览:    关键词:PAT 1156 Sexy Primes(20分)

原题链接:PAT 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 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

题目大意:

sexy primes的定义是这样的:两个数p和p+6,且他们均为质数,那么这两个数都属于sexy primes。
现在给你一个数,问你他是否属于sexy primes,如果是,返回和他配套的另一个数;如果不是,则返回在它之后的第一个满足sexy primes的数。

方法一:模拟

思路:

首先要会判断质数。
对于题目给出的数p:

  • 如果满足p和p-6均是质数或者p和p+6均是质数,那么输出对应的另一个数即可
  • 以上均不满足,那么从p+1开始进行判断,遇到第一个符合要求的数就break然后输出

C++ 代码:

// pat_a_1156#include <iostream>
#include <cmath>
using namespace std;// 筛法求素数 
bool is_prime(int x){if(x < 2) return false;for(int i = 2; i <= sqrt(x); i++ )if(x % i == 0) return false;return true;
}int p, ans;int main(){cin >> p;// p和p-6 if(is_prime(p) && is_prime(p - 6)){cout << "Yes" << endl << p - 6; }// p和p+6 else if(is_prime(p) && is_prime(p + 6)){cout << "Yes" << endl << p + 6;}// 不满足 else{for(ans = p + 1; ; ans++ ){if(is_prime(ans) && is_prime(ans - 6)) break;if(is_prime(ans) && is_prime(ans + 6)) break;}cout << "No" << endl << ans;} return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词