Numeri Knödel - Trova Kn


10

Numeri di Knödel

I numeri di Knödel sono una serie di sequenze. In particolare, i numeri Knödel per un intero positivo nsono l'insieme di numeri composti m, in modo tale che tutti i < m, coprimi a m, soddisfare i^(m-n) = 1 (mod m). L'insieme di numeri Knödel per uno specifico nè indicato Kn. ( Wikipedia ).

Ad esempio, K1sono i numeri di Carmichael e OEIS A002997 . Vanno come: {561, 1105, 1729, 2465, 2821, 6601, ... }. K2è OEIS A050990 e va come, {4, 6, 8, 10, 12, 14, 22, 24, 26, ... }.

Il tuo compito

Il tuo compito è scrivere un programma / funzione / ecc. che richiede due numeri ne p. Esso dovrebbe restituire i primi pnumeri della Knödel Sequence, Kn.

Questo è , quindi vince il codice più breve in byte!

Esempi

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
Perché 4non è nella sequenza K_4? i^(4-4) = 1 mod 4è sempre vero.
isaacg,

1
@isaacg MathWorld ha la condizione aggiuntiva che m > n.
Martin Ender,

Risposte:


6

Pyth, 29 28 byte

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

1 byte salvato grazie a Jakube e orlp.

Dimostrazione.

Inserisci nel modulo

p
n

Un calcolo abbastanza semplice. La primità relativa viene verificata tramite la funzione gcd di Pyth. Questo codice mostra .fla funzione "prima n soddisfacente" di Pyth.

Ho incorporato la condizione implicita che m > navviando la ricerca di mvalori su n + 1.


4

Haskell, 89 byte

Implementazione molto semplice. Definisce un operatore 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]]

Esempio:

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

2
A cosa serve m>n?
rubik,

Non ne ho idea. Stavo ricevendo negative exponenterrori 21!21e aggiungendo che ho risolto il problema.
Lynn,

1
Ho installato Haskell per cercare di capire come liberarmi del m>n&&bit, cambiando m<-[4..]in m<-[n+1..]sembra funzionare. Ottieni anche un numero di byte di 91!
Kade,

1
! Neat Grazie @Vioz.
Lynn,

@ Vioz- Quindi ti sei immischiato con Haskell senza conoscere Haskell prima? Come hai fatto?
orgoglioso haskeller il

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

più o meno la risposta di @Marius, sebbene sviluppata indipendentemente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.