“性感素数 ”是指形如 (p,p+6) 这样的一对素数。
之所以叫这个名字,是因为拉丁语管“六”叫“sex”(即英语的“性感”)。
现给定一个整数,请你判断其是否为一个性感素数。
输入格式
输入在一行中给出一个正整数 N。
输出格式
若 N 是一个性感素数,则在一行中输出 Yes,并在第二行输出与 N 配对的另一个性感素数(若这样的数不唯一,输出较小的那个)。
若 N 不是性感素数,则在一行中输出 No,然后在第二行输出大于 N 的最小性感素数。
数据范围
1≤N≤108
输入样例1:
47
输出样例1:
Yes
41
输入样例2:
21
输出样例2:
No
23
(暴力枚举) O(n)O(n)
没啥好说的,试试水
时间复杂度 O(n)O(n)
参考文献
C++ 代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n;
bool is_prime(int x) // 判定质数
{
if (x < 2) return false;
for (int i = 2; i <= x / i; i ++ )
if (x % i == 0)
return false;
return true;
}
int main()
{
cin>>n;
if((is_prime(n)&&is_prime(n-6))||(is_prime(n)&&is_prime(n+6)))
{
puts("Yes");
if (is_prime(n - 6)) cout << n - 6 << endl;
else cout << n + 6 << endl;
}
else
{
puts("No");
for(int i = n;;i++)
{
if(is_prime(i))
{
if(is_prime(i-6)||is_prime(i+6))
{
cout << i << endl;
return 0;
}
}
}
}
return 0;
}
Java代码
import java.util.*;
public class Main {
static int n;
public static boolean is_prime(int x)
{
if (x < 2) return false;
for (int i = 2; i <= x / i; i ++ )
if (x % i == 0)
return false;
return true;
}
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
if((is_prime(n)&&is_prime(n-6))||(is_prime(n)&&is_prime(n+6)))
{
System.out.println("Yes");
if (is_prime(n - 6)) System.out.println(n-6);
else System.out.println(n+6);
}
else
{
System.out.println("No");
for(int i = n;;i++)
{
if(is_prime(i))
{
if(is_prime(i-6)||is_prime(i+6))
{
System.out.println(i);
return ;
}
}
}
}
}
}
Python3 代码 TLE呜呜呜
def is_prime(x):
if x < 2:
return False
i = 2
while i < x / i:
if x % i == 0:
return False
return True
def main():
n = int(input())
if [is_prime(n) and is_prime(n - 6)] or [is_prime(n) and is_prime(n + 6)]:
print("Yes")
if is_prime(n - 6):
print(n - 6)
else:
print(n + 6)
else:
print("No")
i = n
while i >= n:
if is_prime(i):
if is_prime(i - 6) and is_prime(i + 6):
print(i)
return
else:
i = i + 1
return
if __name__ == "__main__":
main()
Go代码
package main
import "fmt"
var n int
func main(){
fmt.Scanf("%d",&n)
if (is_prime(n)&&is_prime(n-6))||(is_prime(n)&&is_prime(n+6)){
fmt.Printf("Yes\n")
if is_prime(n-6){
fmt.Printf("%d\n",n-6)
}else{
fmt.Printf("%d\n",n+6)
}
}else{
fmt.Printf("No\n")
for i:=n; i>=n; i++{
if is_prime(i){
if is_prime(i-6)||is_prime(i+6){
fmt.Printf("%d\n",i)
return
}
}
}
}
}
func is_prime(x int)bool{
if x < 2 {
return false
}
for i := 2; i <=x/i;i++{
if x%i == 0{
return false
}
}
return true
}
shell(bash)
大佬教教我
嗷嗷嗷
~