1099、性感素数
题目描述
-
“性感素数”是指形如 (p, p+6) 这样的一对素数。之所以叫这个名字,是因为拉丁语管“六”叫“sex”(即英语的“性感”)。(原文摘自 Sexy Primes -- from Wolfram MathWorld)
-
现给定一个整数,请你判断其是否为一个性感素数。
输入输出格式
输入格式:
-
输入在一行中给出一个正整数 N (≤108)。
输出格式:
-
若 N 是一个性感素数,则在一行中输出
Yes
,并在第二行输出与 N 配对的另一个性感素数(若这样的数不唯一,输出较小的那个)。若 N 不是性感素数,则在一行中输出No
,然后在第二行输出大于 N 的最小性感素数。
输入输出样式
输入样例 1: 47 输出样例 1: Yes 41
输入样例 2: 21 输出样例 2: No 23
代码示例
#include <iostream>
#include <cmath>
using namespace std;
int N, number;
bool IsPrime(int number) {
//测试点2当number<7时
if (number <= 1) return false;
for (int i = 2; i <= sqrt(number); i++)
if (number%i == 0) return false;
return true;
}
void IsPrime2(int N) {
//注意一定要判断IsPrime(N)我就是忘记了卡测试点2、4卡了好久
if (IsPrime(N - 6) && IsPrime(N)) {
if (N == number) cout << "Yes\n" << N - 6 << endl;
else cout << "No\n" << N << endl;
}
else if (IsPrime(N + 6) && IsPrime(N)) {
if (N == number) cout << "Yes\n" << N + 6 << endl;
else cout << "No\n" << N << endl;
}
else IsPrime2(++N);
}
int main() {
cin >> N;
number = N;
IsPrime2(N);
return 0;
}
//柳神的代码(好像和我差不多)
//https://www.liuchuo.net/archives/9063 柳神的个人网站
#include <iostream>
#include <cmath>
using namespace std;
int p, ans;
int is_prime(int x) {
if (x < 2) return 0;
for (int i = 2; i <= sqrt(x); i++)
if (x % i == 0) return 0;
return 1;
}
int main() {
cin >> p;
if (is_prime(p) && is_prime(p - 6)) {
cout << "Yes\n" << p - 6;
} else if (is_prime(p) && is_prime(p + 6)) {
cout << "Yes\n" << 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\n" << ans;
}
return 0;
}