1099. Primes sexys (20 puntos)

"Número primo sensual" se refiere a un par de números primos de la forma (p, p+6). La razón de este nombre es que "seis" se llama "sexo" en latín (es decir, "sexy" en inglés). (Extracto original de http://mathworld.wolfram.com/SexyPrimes.html)

Ahora, dado un número entero, juzgue si es un número primo atractivo.

Formato de entrada:

La entrada da un número entero positivo N (≤108) en una línea.

Formato de salida:

Si N es un número primo atractivo, envíelo en una línea Yesy genere otro número primo atractivo emparejado con N en la segunda línea (si dicho número no es único, genere el más pequeño). Si N no es un número primo atractivo, envíelo en una línea Noy luego genere el número primo atractivo más pequeño mayor que N en la segunda línea.

Muestra de entrada 1:

47

Muestra-1: "> Muestra-1: "> Muestra de salida 1:

Yes
41

Muestra de entrada 2:

21

Muestra de salida 2:

No
23

El punto a tener en cuenta es que al juzgar un número primo, se debe tener en cuenta que el número primo mínimo es 2 y cualquier número menor que 2 no es un número primo. Además, cuando N no es un número primo atractivo, cuando se busca un número primo atractivo mayor que N, el número M encontrado puede ser el mayor en el par de números primos atractivos, por lo que también se debe considerar isPrime(i-6).

#include<cstdio>
#include<cmath> 
#include<iostream>
using namespace std;
bool isPrime(int num);
int main(){
	int N;
	cin>>N;
	if(isPrime(N) && isPrime(N-6))
		cout<<"Yes"<<endl<<N-6<<endl;
	else if(isPrime(N) && isPrime(N+6))
		cout<<"Yes"<<endl<<N+6<<endl;
	else{
		for(int i=N+1;;i++){
			//i本身是质数,且i-6 或者 i+6 也是质数 
			if(isPrime(i)&&(isPrime(i+6)||isPrime(i-6))){
				cout<<"No"<<endl<<i<<endl;
				break;
			}
				
		}
	}	
	return 0;
}

bool isPrime(int num){
	if(num<2)
		return false;
	int n=sqrt(num);
	for(int i=2;i<=n;i++)
		if(num%i==0)
			return false;
	return true;
}

Supongo que te gusta

Origin blog.csdn.net/qq_16382227/article/details/124035005
Recomendado
Clasificación