Números Knödel - Encontre Kn


10

Números de Knödel

Os números de Knödel são um conjunto de seqüências. Especificamente, os números de Knödel para um número inteiro positivo nsão o conjunto de números compostos m, de modo que todos i < m, coprime para m, satisfazem i^(m-n) = 1 (mod m). O conjunto de números de Knödel para um específico né indicado Kn. ( Wikipedia ).

Por exemplo, K1são os números Carmichael e OEIS A002997 . Eles vão como: {561, 1105, 1729, 2465, 2821, 6601, ... }. K2é OEIS A050990 e fica como {4, 6, 8, 10, 12, 14, 22, 24, 26, ... },.

Sua tarefa

Sua tarefa é escrever um programa / função / etc. isso leva dois números ne p. Deve retornar os primeiros pnúmeros da sequência de Knödel Kn,.

Isso é , então o código mais curto em bytes vence!

Exemplos

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]

11
Por que 4não está na sequência K_4? i^(4-4) = 1 mod 4é sempre verdade.
Isaacg

11
@isaacg MathWorld tem a condição adicional de que m > n.
Martin Ender

Respostas:


6

Pitão, 29 28 bytes

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

1 byte economizado graças a Jakube e orlp.

Demonstração.

Entrada no formulário

p
n

Um cálculo bastante direto. A primidez relativa é verificada através da função gcd de Pyth. Esse código mostra a .ffunção "primeiro e satisfatória" de Pyth.

Eu incorporei a condição implícita de que m > n, iniciando a busca por mvalores em n + 1.


4

Haskell, 89 bytes

Implementação muito direta. Define um operador binário 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]]

Exemplo:

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

2
Para que serve m>n?
21315

Eu não faço ideia. Eu estava recebendo negative exponenterros 21!21e adicionando isso resolveu o problema.
Lynn

11
Eu instalei o Haskell para tentar descobrir como se livrar do m>n&&bit, mudar m<-[4..]para m<-[n+1..]parece funcionar. Você também recebe uma contagem de bytes de 91!
Kade

11
Arrumado! Obrigado, @Vioz.
Lynn

@ Vioz- Então você se intrometeu com Haskell sem conhecer Haskell antes? Como você fez isso?
haskeller orgulhoso

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]]

da mesma forma que a resposta de @Marius, embora desenvolvida de forma independente.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.