Knödel-Zahlen - Finden Sie Kn


10

Knödel-Zahlen

Die Knödel-Zahlen sind eine Reihe von Sequenzen. Insbesondere sind die Knödel-Zahlen für eine positive ganze Zahl ndie Menge zusammengesetzter Zahlen m, so dass alle i < m, Coprime to m, erfüllen i^(m-n) = 1 (mod m). Die Menge der Knödel-Zahlen für eine bestimmte nwird bezeichnet Kn. ( Wikipedia ).

Zum Beispiel K1sind die Carmichael-Nummern und OEIS A002997 . Sie gehen wie : {561, 1105, 1729, 2465, 2821, 6601, ... }. K2ist OEIS A050990 und geht wie , {4, 6, 8, 10, 12, 14, 22, 24, 26, ... }.

Deine Aufgabe

Ihre Aufgabe ist es, ein Programm / eine Funktion / etc. Zu schreiben. das braucht zwei Zahlen, nund p. Es sollte die ersten pNummern der Knödel-Sequenz zurückgeben Kn.

Dies ist , also gewinnt der kürzeste Code in Bytes!

Beispiele

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
Warum ist 4nicht in der Reihenfolge K_4? i^(4-4) = 1 mod 4ist immer wahr.
isaacg

1
@isaacg MathWorld hat die zusätzliche Bedingung, dass m > n.
Martin Ender

Antworten:


6

Pyth, 29 28 Bytes

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

1 Byte dank Jakube und Orlp gespeichert.

Demonstration.

Eingabe in das Formular

p
n

Eine ziemlich einfache Berechnung. Die relative Primheit wird über die gcd-Funktion von Pyth überprüft. Dieser Code zeigt .fPyth's "erste n befriedigende" Funktion.

Ich habe die implizite Bedingung aufgenommen, dass m > ndurch Starten der Suche nach mWerten bei n + 1.


4

Haskell, 89 Bytes

Sehr einfache Implementierung. Definiert einen binären Operator 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]]

Beispiel:

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

2
Wofür ist m>n?
Rubik

Ich habe keine Ahnung. Ich bekam negative exponentFehler 21!21und fügte hinzu, dass das Problem gelöst wurde.
Lynn

1
Ich habe Haskell installiert, um herauszufinden, wie man das m>n&&Bit loswird. Der Wechsel m<-[4..]zu m<-[n+1..]scheint zu funktionieren. Sie erhalten auch eine Byteanzahl von 91!
Kade

1
Ordentlich! Danke, @Vioz.
Lynn

@ Vioz- Also hast du dich in Haskell eingemischt, ohne Haskell vorher zu kennen? Wie hast du es gemacht?
stolzer 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]]

Ähnlich wie die Antwort von @Marius, obwohl sie unabhängig entwickelt wurde.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.