Esto es en esencia un problema de coincidencia de patrones.
Permítanme volver a armarlo para ver si entendí correctamente los problemas básicos:
Variables
norte
K
norte
k
- Encuentre un número entero positivo n tal que n / 2 sea un cuadrado, n / 3 sea un cubo y n / 5 sea una quinta potencia.
- ¿Cuál es el significado del teorema de Friedlander-Iwaniec?
- ¿Cuál es el resto cuando 15 ^ 40 dividido por 1309?
- Si x no es un factor de pyq, ¿puede x ser un factor de p ^ 5 + q ^ 4 y p ^ 4 + q ^ 3? Si no, ¿cómo?
- Cómo contar cuántos triples (a, b, c) satisfacen [matemáticas] a ^ 2 + b ^ 2 \ equiv c ^ 2 \ mod {n}, 1 \ leq a, b, c \ leq n – 1, a \ leq b [/ math]
Serie
S1 = {0 * N + n, 1 * N + n, 2 * N + n, 3 * N + n, 4 * N + n,…, N²-N + n}
S2 = {1 * k, 2 * k, 3 * k, 4 * k,…} | x * k <= N²; k <= K
Ahora, el problema a resolver es que N en S1, todos S2 con k entre 1 y 2 * 10 ^ 9 contienen al menos un elemento de cada S1.
Una forma sería calcular realmente todas las series y luego ejecutar una referencia cruzada, pero eso sería crudo y tomaría más de 2 segundos en la mayoría de las máquinas e idiomas.
Por lo tanto, estamos buscando una solución formulada que prediga el resultado sin calcular todos los valores.
Para hacer esto, necesitamos conocer algunas de las reglas que sigue la serie y cómo se superpondrá su contenido:
permítanme imprimir una breve instantánea de la serie para facilitar la comprensión primero:
[n] S1 (N = 4) = {
1,5,9,13;
2,6,10,14;
3,7,11,15;
4,8,12,16
}
ahora para hacer algo evidente, hagámoslo con una N más grande
[n] S1 (N = 16) = {
1, 17,33,65,81,97,113,129,145,161,177,193,209,225,241;
2,18,34,66,82,98,114,130,146,162,178,194,210,226,242;
3,19,35,67,83,99,115,131,147,163,179,195,211,227,242;
…
16,32,64,80,96,112,128,144,160,176,192,208,224,240,256
}
Lo que ve es que si ingresó la serie en una matriz, no solo todas tienen el mismo número de columnas, no, cada columna cuenta para cada nueva fila y el último valor en cualquier columna +1 es el primer número en la siguiente fila para que todos los valores estén siempre cubiertos por la distribución y tampoco puedan existir duplicados .
Ahora veamos también la serie S2:
[k] S2 (N = 4) = {
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16;
2,4,6,8,10,12,14,16;
3,6,9,12,15;
4,8,12,16;
5,10,15;
6,12;
7,14;
8;
9;
10;
12;
13;
14;
15;
dieciséis
}
Lo que esto nos da es un sistema de coordenadas N² N², no necesitamos mirar la totalidad de K por ahora, supongamos que elegimos K para ser 16 aquí.
¡Mira cómo las series en columnas y filas son exactamente iguales !
Esto ahora nos permitirá hacer coincidir los dos campos entre sí usando solo K y N en el proceso sin calcular ningún valor de ninguna de las series.
Repasemos nuestro Criterio:
todos los S2 deben contener al menos un valor de cada S1
¿Curiosamente, veamos en el ejemplo anterior si el estudiante que califica más alto tiene todos sus S2 a continuación también califica?
La respuesta es no. Mientras que el estudiante con la calificación más alta siempre sería k = N-1, ya que eso causa franjas diagonales a través del campo [n] S1, lo que no significa que todas las K <= k sean resultados válidos. Mire la serie k = 2 S2, solo contiene números de [2] S1 y [4] S1. Tal vez porque es 0.5 * N?
¡Miremos N = 6!
[k] S2 (N = 6) = {
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23…;
2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36;
3,6,9,12,15,18,21,24,27,30,33,36;
4,8,12,16,20,24,28,32,36;
5,10,15,20,25,30,35;
6,12,18,24,30,36;
7,14,21,28,35;
8,16,24,32;
9,18,27,36;
10,20,30;
12,24,36;
13,26;
14,28;
15,30;
16,32;
17; 34;
18; 36;
19;
…
[n] S1 (N = 6) = {
1,7,13,19,25,31;
2,8,14,20,26,32;
3,9,15,21,27,33;
4,10,16,22,28,34;
5,11,17,23,29,35;
6,12,18,24,30,36
}
Evidentemente, la serie [0.5N] S2 no califica, ¿veremos si este podría ser el umbral mágico?
¡Ay! No funciona, probablemente porque todos los k que pueden dividir N no funcionarán, ya que repetirán para recorrer la serie de la misma manera una y otra vez.
Ahora estamos en algo aquí! ¡Números primos! Si ningún número igual o inferior a K excepto 1 puede dividir N, deberíamos estar bien, ¿verdad?
Por lo tanto, cuando recibimos una K dada, ¡queremos tener una N que cumpla con nuevos criterios!
-N debe ser un número primo para que no se pueda dividir por K.
-N debe ser mayor que K para que k = K pueda alcanzar la última columna de S1
Entonces, podríamos comenzar en K + 1 y probar cada número mayor que eso y ver si es primo, el primero que encontramos es nuestro N.
[código]
public static boolean isPrime ( long n) {
if (n <= 3) { return n> 1; } else if (n% 2 == 0 || n% 3 == 0) { return false ; } else { for ( int i = 5; i <Math.sqrt (n) + 1; i + = 6) { if (n% i == 0 || n% (i + 2) == 0) { return falso }} return true ; }
}
[/código]
Este es un fragmento de código de ejemplo para verificar si un número es primo (Prueba de primalidad)
Esto solo necesita verificar a lo sumo 200 números (no estoy seguro acerca de la función de separación principal en el rango de 100,000+ pero está principalmente en el rango de 5-30 en los rangos de <10,000) y debe completarse dentro del límite de 2 segundos dado que ' No se está ejecutando en una calculadora del siglo 90.
Diviértete 😉
Espero que no uses esto en el examen de ingreso real; ¡no hagas trampa en los exámenes!