Номери Knödel - Знайдіть Kn


10

Номери Кнодель

Числа Кнодель - це набір послідовностей. В Зокрема, число Knodel для позитивного цілого числа nпредставляють собою набір складених чисел m, таким чином, що все i < m, взаємно просте з m, задовольняють умові i^(m-n) = 1 (mod m). Безліч чисел Knodel для конкретного nпозначається Kn. ( Вікіпедія ).

Так , наприклад, K1є числа Carmichael і OEIS A002997 . Вони йдуть , як: {561, 1105, 1729, 2465, 2821, 6601, ... }. K2є OEIS A050990 і йде , як, {4, 6, 8, 10, 12, 14, 22, 24, 26, ... }.

Ваше завдання

Ваше завдання - написати програму / функцію / тощо. що займає два числа, nі p. Вона повинна повертати перші pномери в Knodel послідовності, Kn.

Це , тому найкоротший код у байтах виграє!

Приклади

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
Чому це 4не в послідовності K_4? i^(4-4) = 1 mod 4завжди правда.
isaacg

1
@isaacg MathWorld має додаткову умову , що m > n.
Мартін Ендер

Відповіді:


6

Pyth, 29 28 байт

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

1 байт збережено завдяки Jakube та orlp.

Демонстрація.

Введіть у форму

p
n

Досить прямолінійний розрахунок. Відносна переважність перевіряється за допомогою функції Pyth gcd. Цей код демонструє .fфункцію "першого задоволення" Піта.

Я включив неявну умову, що m > n запустивши пошук mзначень у n + 1.


4

Haskell, 89 байт

Дуже відверта реалізація. Визначає двійковий оператор 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]]

Приклад:

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

2
Для чого m>n?
rubik

Я поняття не маю. Я отримував negative exponentпомилки 21!21і додав, що вирішив проблему.
Лінн

1
Я встановив Haskell , щоб спробувати з'ясувати , як позбутися від m>n&&біта, зміни m<-[4..]в , m<-[n+1..]здається, працює. Ви також отримаєте кількість байтів 91!
Каде

1
Акуратно! Дякую, @Vioz.
Лінн

@ Vioz - Отже, ти втрутився з Haskell, не знаючи про Haskell раніше? Як ти це зробив?
гордий haskeller

2

Хаскелл, 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]]

майже так само, як відповідь @Marius, хоча і розроблений самостійно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.