Capitán Flint y reclutamiento de tripulación

Capitán Flint y reclutamiento de tripulación
Inserte la descripción de la imagen aquí

Ideas

Idea principal: si un entero xxx se puede expresar como dos números primosppp yq (p ≠ q) q (p ≠ q)Q ( p=q ) , entonces podemos llamarlo un número primo cercano.

Ingrese un número entero nnn , expreselo como la suma de cuatronúmeros enteros positivosdiferentes, y tres de ellos deben estar cerca de números primos

Primero enumeramos los números primos cercanos más pequeños y encontramos la regla inicial.

Se puede ver que los tres números primos cercanos más pequeños son 2 ∗ 3, 2 ∗ 5, 2 ∗ 7 (6, 10, 14) 2 * 3,2 * 5,2 * 7 (6,10,14)23 ,25 ,27 6 ,1 0 ,1 4 )

Es decir, menor que (6 + 10 + 14 + 1 = 31) (6 + 10 + 14 + 1 = 31)( 6+1 0+1 4+1=.3 . 1 ) dennn no se puede representar de esta manera.

A continuación, consideramos el caso de la repetición. Cuando nnn es mayor que(6 + 10 + 14 + 14 = 44) (6 + 10 + 14 + 14 = 44)( 6+1 0+1 4+1 4=4 4 ) , no es necesario considerar cuestiones duplicadas.

Luego, mire tres casos especiales (6, 10, 14 repetición) (6, 10, 14 repetición)( 6 ,1 0 ,. 1 . 4 peso complejo ) pueden estar dispuestos en otras soluciones.

3 ∗ 5 15 3 * 5 \ quad15 351 5 también es casi primo, por lo que podemos obtener fácilmente

6 10 14 6 6 \ quad 10 \ quad 14 \ quad6 61 01 46 Alternativa:6. 5 10 15 6 \ Quad 10 \ quad15 \ Quad.561 01 55

6 10 14 10 6 \ quad 10 \ quad 14 \ quad 10 61 01 41 0 sustitución:6 10 15 9 6 \ quad 10 \ quad 15 \ quad 961 01 59

6 10 14 14 6 \ quad 10 \ quad14 \ quad 14 61 01 41 4 Alternativa:6 10 15 13 6 \ quad 10 \ quad 15 \ quad1361 01 51 3

Para emitir un juicio especial sobre estos tres casos especiales, la complejidad del tiempo puede ser O (1) O (1)O ( 1 )

#include<bits/stdc++.h>

using namespace std;
int main() {
    
    
    int _;
    scanf("%d", &_);
    while (_--) {
    
    
        int n;
        scanf("%d", &n);
        // 6 10 14
        if (n <= 30) {
    
    
            puts("NO");
            continue;
        }
        puts("YES");
        if (n == 36) {
    
    
            printf("6 10 15 5\n");
            continue;
        }
        if (n == 40) {
    
    
            printf("6 10 15 9\n");
            continue;
        }
        if (n == 44) {
    
    
            printf("6 10 15 13\n");
            continue;
        }
        printf("6 10 14 %d\n", n - 30);
    }
}

Supongo que te gusta

Origin blog.csdn.net/weixin_43601103/article/details/112801188
Recomendado
Clasificación