【Preguntas del examen provincial de 2013】 Número de la suerte


Directorio de artículos


Número de la suerte

El número de la suerte recibe un 波兰数学家乌拉姆nombre y se genera utilizando un "método de tamiz" similar al de generar números primos.

  • Primero, escribe números naturales a partir del 1.1,2,3,4,5,6.....

  • 1Es el primer número de la suerte, comenzamos con el número 2. Poner todoNúmero de serieLos elementos que pueden ser divisibles se eliminan y se convierten en1_3_5_7_9.......

  • Reducirlos y reordenarlos, como: 1,3,5,7,9....En este momento,3Para el segundo número de la suerte, 注意,是序号位置,不是那个数本身能否被3整除!!elimine todos los números del número de secuencia que pueda ser divisible por 3 (los números eliminados deben ser 5, 11, 17 ...).

  • En este momento, 7 es el tercer número de la suerte y luego borra la posición del número que es divisible por 7 (19, 39, ...)

  • La última secuencia restante es similar:
    1,3,7,9,13,15,21,25,31,33,37,43,49,51,63,67,69,73,75,79.....

Esta pregunta requiere:
Ingrese dos números enteros positivos m n, separados por espacios (m <n <1000 * 1000)
El programa genera el número de números de la suerte entre my n ( 不包含m和n)

例如1:
   用户输入:
    1 20
   程序输出:
    5
例如2:
   用户输入:
    30 69
   程序输出:
    8

Inserte la descripción de la imagen aquí

Se basa principalmente en la descripción del título para transformarlo en una representación lógica del código. Primero, podemos declarar un arreglo de longitud n e inicializarlo a un número impar, lo que equivale a borrar todos los números pares, y declarando una variable que representa un número de la suerte Subíndice, en el ciclo, juzgamos si el subíndice actual puede ser subíndice por el número de la suerte.

El número correspondiente es divisible, si puede ser divisible, significa que el número correspondiente al subíndice actual debe ser eliminado, pero para la situación actual, no hacemos nada. Si no es divisible, entonces nuestro número actual no puede ser eliminado, por lo que tomamos El método es mover los números que no se eliminarán hacia adelante, y los números que deben eliminarse antes se sobrescribirán, por lo que 变量pse necesita registrar dónde se debe mover el número correspondiente al subíndice actual. del ciclo es todo lo que no es. Los números eliminados están en las posiciones de la matriz correspondientes a 0-p, y los números después de p tampoco se eliminan, y puede haber números duplicados en algunas posiciones.

En este momento, debe agregar uno al subíndice del número de la suerte para ver si el elemento correspondiente de la matriz actual es mayor o igual que el intervalo correcto que debe resolverse. Si el juicio es verdadero, entonces debe salir el bucle while más externo, si no, continúe con la pantalla anterior.

Sabemos que si los siguientes números no son divisibles de manera uniforme, entonces los números anteriores se sobrescribirán, y la menor cantidad de números que no sean divisibles de manera uniforme al retroceder, la mayoría de ellos avanzará en el pasado.

package 蓝桥杯;

import java.util.Arrays;
import java.util.Iterator;
import java.util.Scanner;
import java.util.TreeSet;

public class Test06_幸运数 {
    
    

    public static void main(String[] args) {
    
    
        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt();
        int n = sc.nextInt();
        // 构建数组
        int[] array = new int[n];
        for (int i = 0; i < n; i++) {
    
    
            array[i] = 2 * i + 1;
        }
        // 定义幸运数的下标
        int luck_index = 1;
        while (true) {
    
    
            // 记录数字向前挪动的坑位
            int p = luck_index + 1;
            for (int i = 1 + luck_index; i < n; i++) {
    
    
                if ((i + 1) % array[luck_index] == 0) {
    
    

                } else {
    
    
                    array[p] = array[i];
                    p++;
                }
                if (array[i] > n) {
    
    
                    break;
                }
            }

            for (int i = 0; i < n; i++) {
    
    
                System.out.print(array[i] + " ");
            }
            System.out.println();

            luck_index++; // 幸运数不断前移
            if (array[luck_index] >= n) {
    
    
                break;
            }
        }

        int ans = 0;
        for (int i = 0; i < n; i++) {
    
    
            if (array[i] >= n) {
    
    
                break;
            }
            if (array[i] > m) {
    
    
                ans++;
            }
        }
        System.out.println(ans);
    }

}

Inserte la descripción de la imagen aquí

Volver arriba


Supongo que te gusta

Origin blog.csdn.net/qq_45797116/article/details/113884315
Recomendado
Clasificación