Capitán Flint y reclutamiento de tripulación
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)2∗3 ,2∗5 ,2∗7 (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 3∗51 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);
}
}