Problema de algoritmo simple, conjetura de pares de números primos


Prefacio

Empecé a aprender algoritmos hoy y nunca antes había estudiado bien. Pero hoy, finalmente entiendo el significado del algoritmo.


1. Conjetura del par tema-número primo

Definamos d n como: dn = p (n + 1) −p n, donde p i es el i-ésimo número primo. Obviamente, d 1 = 1, y d n es par para n> 1. La "conjetura de los pares primos" cree que "hay infinitos pares de números primos adyacentes con una diferencia de 2". Ahora, dado cualquier entero positivo N (<10 5), cuente el número de pares de números primos que no exceden N que satisfacen la conjetura.

2. Preguntas

Mi idea inicial era muy simple, solo encuentra todos los números primos directamente y luego verifica si la diferencia entre cada par de números primos es 2. Encuentra los números primos de forma directa y exhaustiva.

el código se muestra a continuación:

import java.util.Scanner;
public class test2 {
    
    
    public static void main(String[] args){
    
    
        Scanner in = new Scanner(System.in);
        int a = in.nextInt();
        int b = 2;
        int c = 3;
        int num = 0;
        boolean z = true;
        for (int x = 3; x<=a ; x++){
    
    
            for(int y = 2;y<=x;y++){
    
    
                if(x%y==0){
    
    
                    z = false;
                    break;
                }
            }
            if(z){
    
    
                b = c;
                c = x;
                if (c - b == 2){
    
    
                    num++;
                }
            }
            z = true;
        }
        System.out.println(num);
    }
}

No hay ningún problema con la función, pero se agotó el tiempo de espera al revisar la ortografía. La razón es cuando el número es 10 ^ 5. Se tarda demasiado en comprobar si un número es primo. En este momento no puedo hacer nada.

enmienda

Después de la consulta, juzgar si un número es un número primo no tiene por qué ser exhaustivo en sí mismo. Solo cuenta hasta la raíz cuadrada. Esto ahorra mucho tiempo de cálculo en la etapa posterior. Math.sqrt (x) se puede utilizar para calcular la raíz cuadrada en Java. Por lo tanto, el código de juicio de números primos se modifica a lo siguiente.

            for(int y = 2;y<=Math.sqrt(x);y++){
    
    
                if(x%y==0){
    
    
                    z = false;
                    break;
                }
            }

para resumir

Hoy por fin entiendo el significado de los algoritmos para los programas, antes solo usaba mi cerebro y tenía ganas de abrir una puerta. Aunque es un tema simple, sigo sintiendo que se ha beneficiado mucho. Solo el primer blog, como memorial.

Supongo que te gusta

Origin blog.csdn.net/qq_43668890/article/details/114043764
Recomendado
Clasificación