Numery Knödel - Znajdź Kn


10

Numery Knödel

Liczby Knödela są zbiorem sekwencji. W szczególności, liczba Knodel dla dodatniej liczby całkowitej nstanowią zbiór liczb zespolonych m, tak, że wszystkie i < m, względnie pierwsze do mspełniają i^(m-n) = 1 (mod m). Zbiór liczb Knödela dla określonego noznaczono Kn. ( Wikipedia ).

Na przykład K1są to numery Carmichael i OEIS A002997 . Idą jak: {561, 1105, 1729, 2465, 2821, 6601, ... }. K2jest OEIS A050990 i idzie tak, {4, 6, 8, 10, 12, 14, 22, 24, 26, ... }.

Twoje zadanie

Twoim zadaniem jest napisanie programu / funkcji / itp. to wymaga dwóch liczb ni p. Należy zwrócić pierwsze pnumery na Knodel Sequence, Kn.

To jest , więc wygrywa najkrótszy kod w bajtach!

Przykłady

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
Dlaczego 4nie ma w sekwencji K_4? i^(4-4) = 1 mod 4jest zawsze prawdziwe.
isaacg

1
@isaacg MathWorld ma dodatkowy warunek, że m > n.
Martin Ender

Odpowiedzi:


6

Pyth, 29 28 bajtów

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

1 bajt zapisany dzięki Jakube i orlp.

Demonstracja.

Wprowadź w formularzu

p
n

Dość prosta kalkulacja. Względna pierwotność jest sprawdzana za pomocą funkcji gcd Pytha. Ten kod przedstawia .ffunkcję „pierwsze n spełniające” Pytha.

Włączyłem ukryty warunek, że m > nrozpoczynając wyszukiwanie mwartości od n + 1.


4

Haskell, 89 bajtów

Bardzo prosta implementacja. Definiuje operator binarny 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]]

Przykład:

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

2
Do czego służy m>n?
rubik

Nie mam pojęcia. Otrzymywałem negative exponentbłędy 21!21i dodawałem to do rozwiązania problemu.
Lynn

1
Zainstalowałem Haskell, aby dowiedzieć się, jak się go pozbyć m>n&&, zmiana m<-[4..]na m<-[n+1..]wydaje się działać. Otrzymujesz również liczbę bajtów 91!
Kade

1
Schludny! Dzięki, @Vioz.
Lynn

@ Vioz- Więc mieszałeś się z Haskellem, nie znając go wcześniej? Jak to zrobiłeś?
dumny 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]]

podobnie jak odpowiedź @Marius, choć opracowana niezależnie.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.