PAT B1007 Conjetura del par de números primos (de 20)

Ideas:
Paso 1: Encuentre todos los números primos en el rango
Paso 2: Determine si dos números primos adyacentes difieren en 2. Si la diferencia es 2, la cuenta se incrementa en 1.

Solución violenta:
El siguiente método consiste en resolver todos los números primos en el rango de fuerza bruta sin optimización, es decir, la complejidad del tiempo no cumple con los requisitos, no se puede obtener la puntuación completa y se producirá un tiempo de espera.

#include<iostream>

using namespace std;

int main()
{
    
    
	int N;
	cin >> N;
	int num[100000]; // 存储所有的
	int m = 0;
	for (int i = 2; i < N + 1; i++)
	{
    
    
		string s = "YES";
		for (int j = 2; j < i; j++)
		{
    
    
			if (i%j == 0) 
			{
    
    
				s = "NO";
				break;
			}
		}
		if (s == "NO") ;
		else num[m++] = i;
	}
	int count = 0;
	for (int i = 1; i < m; i++) 
	{
    
    
		if (num[i] - num[i - 1] == 2) count++;
	}
	cout << count;

	system("pause");
	return 0;
}

resultado de la operación:
Inserte la descripción de la imagen aquí

Después de la optimización:
es decir, al resolver números primos, el rango de consideración es de 2 al radical i, de modo que se reduce la complejidad del tiempo y se puede lograr la puntuación completa AC.

#include<iostream>
#include<math.h>

using namespace std;

int main()
{
    
    
	int N;
	cin >> N;
	int num[100000]; // 存储所有的
	int m = 0;
	for (int i = 2; i < N + 1; i++)
	{
    
    
		string s = "YES";
		for (int j = 2; j < sqrt(i)+1; j++)
		{
    
    
			if (i%j == 0) 
			{
    
    
				s = "NO";
				break;
			}
		}
		if (s == "NO") ;
		else num[m++] = i;
	}
	int count = 0;
	for (int i = 1; i < m; i++) 
	{
    
    
		if (num[i] - num[i - 1] == 2) count++;
	}
	cout << count;

	system("pause");
	return 0;
}

Las áreas específicas de optimización:

for (int j = 2; j < sqrt(i)+1; j++)

Resultado de salida:
Inserte la descripción de la imagen aquí

Reflexión del código postal: al
hacer preguntas, si tiene requisitos de tiempo, debe considerar la complejidad del tiempo y debe encontrar formas de reducir la complejidad del tiempo.

Supongo que te gusta

Origin blog.csdn.net/qq_27538633/article/details/105921430
Recomendado
Clasificación