Nomor Knödel - Temukan Kn


10

Nomor Knödel

Angka-angka Knödel adalah serangkaian urutan. Secara khusus, angka-angka Knödel untuk bilangan bulat positif nadalah himpunan bilangan komposit m, sehingga semua i < m, coprime untuk m, memuaskan i^(m-n) = 1 (mod m). Himpunan nomor Knödel untuk suatu spesifik ndilambangkan Kn. ( Wikipedia ).

Misalnya, K1adalah nomor Carmichael , dan OEIS A002997 . Mereka pergi seperti: {561, 1105, 1729, 2465, 2821, 6601, ... }. K2adalah OEIS A050990 dan berjalan seperti {4, 6, 8, 10, 12, 14, 22, 24, 26, ... },.

Tugas Anda

Tugas Anda adalah menulis program / fungsi / dll. yang membutuhkan dua angka, ndan p. Seharusnya mengembalikan pnomor pertama dari Urutan Knödel Kn,.

Ini adalah , jadi kode terpendek dalam byte menang!

Contohnya

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
Kenapa 4tidak berurutan K_4? i^(4-4) = 1 mod 4selalu benar.
isaacg

1
@isaacg MathWorld memiliki kondisi tambahan itu m > n.
Martin Ender

Jawaban:


6

Pyth, 29 28 byte

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

1 byte disimpan berkat Jakube dan orlp.

Demonstrasi.

Masukan dalam formulir

p
n

Perhitungan yang cukup mudah. Primeness relatif diperiksa melalui fungsi gcd Pyth. Kode ini menampilkan .ffungsi "pertama dan memuaskan" Pyth.

Saya telah memasukkan kondisi implisit bahwa m > ndengan memulai pencarian mnilai pada n + 1.


4

Haskell, 89 byte

Implementasi yang sangat mudah. Menentukan operator biner 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]]

Contoh:

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

2
Untuk apa m>n?
rubik

Saya tidak punya ide. Saya mendapatkan negative exponentkesalahan 21!21, dan menambahkan bahwa dalam memecahkan masalah.
Lynn

1
Saya telah menginstal Haskell untuk mencoba dan mencari tahu bagaimana untuk menyingkirkan m>n&&bit, mengubah m<-[4..]ke m<-[n+1..]tampaknya bekerja. Anda juga mendapatkan hitungan byte 91!
Kade

1
Rapi! Terima kasih, @Vioz.
Lynn

@ Vioz- Jadi Anda ikut campur dengan Haskell tanpa mengetahui Haskell sebelumnya? Bagaimana kamu melakukannya?
haskeller bangga

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

hampir sama dengan jawaban @Marius, meskipun dikembangkan secara independen.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.