Números de Knödel - Encuentra Kn


10

Números Knödel

Los números de Knödel son un conjunto de secuencias. Específicamente, los números knödel para un número entero positivo nson el conjunto de números compuestos m, de manera que todo i < m, primos entre sí a m, satisfacen i^(m-n) = 1 (mod m). El conjunto de números de Knödel para un específico nse denota Kn. ( Wikipedia )

Por ejemplo, K1son los números de Carmichael y OEIS A002997 . Ellos van como: {561, 1105, 1729, 2465, 2821, 6601, ... }. K2es OEIS A050990 y se va como, {4, 6, 8, 10, 12, 14, 22, 24, 26, ... }.

Tu tarea

Su tarea es escribir un programa / función / etc. eso toma dos números, ny p. Debe devolver los primeros pnúmeros de la secuencia Knödel, Kn.

Este es el , por lo que gana el código más corto en bytes.

Ejemplos

1, 6   ->   [561, 1105, 1729, 2465, 2821, 6601]
2, 3   ->   [4, 6, 8]
4, 9   ->   [6, 8, 12, 16, 20, 24, 28, 40, 44]
3, 1   ->   [9]
3, 0   ->   []
21, 21 ->   [45, 57, 63, 85, 105, 117, 147, 231, 273, 357, 399, 441, 483, 585, 609, 651, 741, 777, 861, 903, 987]

1
¿Por qué 4no está en la secuencia K_4? i^(4-4) = 1 mod 4siempre es cierto
isaacg

1
@isaacg MathWorld tiene la condición adicional de que m > n.
Martin Ender

Respuestas:


6

Pyth, 29 28 bytes

.f&tPZ!f&q1iTZt%^T-ZQZSZvzhQ

1 byte guardado gracias a Jakube y orlp.

Demostración.

Entrada en el formulario

p
n

Un cálculo bastante sencillo. Primeness relativa se verifica a través de la función gcd de Pyth. Este código muestra la .ffunción "primera n satisfactoria" de Pyth.

He incorporado la condición implícita de que m > nal comenzar la búsqueda de mvalores en n + 1.


4

Haskell, 89 bytes

Implementación muy sencilla. Define un operador binario n!p.

n!p=take p[m|m<-[n+1..],any((<1).mod m)[2..m-1],and[i^(m-n)`mod`m<2|i<-[1..m],gcd i m<2]]

Ejemplo:

Prelude> 4!9
[6,8,12,16,20,24,28,40,44]

2
Lo que es m>npara?
rubik

No tengo idea. Estaba recibiendo negative exponenterrores 21!21, y agregar eso resolvió el problema.
Lynn

1
Instalé Haskell para intentar descubrir cómo deshacerse de la m>n&&broca, cambiar m<-[4..]a m<-[n+1..]parece funcionar. ¡También obtienes un recuento de bytes de 91!
Kade

1
¡Ordenado! Gracias, @Vioz.
Lynn

@ Vioz- ¿Entonces te entrometiste con Haskell sin conocerlo antes? ¿Cómo lo hiciste?
orgulloso haskeller

2

Haskell, 90

a#b=gcd a b>1
n!p=take p[m|m<-[n+1..],any(m#)[2..m-1],all(\i->m#i||mod(i^(m-n))m<2)[1..m]]

muy similar a la respuesta de @Marius, aunque desarrollada independientemente.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.