Knödel numaraları - Kn bul


10

Knödel Numaraları

Knödel sayıları bir dizi dizidir. Özellikle, bir pozitif tamsayı için Knödel sayılar nkompozit sayılar kümesidir m, öyle bütün bu i < m, aralarında asal için mtatmin i^(m-n) = 1 (mod m). Belirli bir Knödel sayı kümesi nbelirtilir Kn. ( Wikipedia ).

Örneğin K1, Carmichael sayıları ve OEIS A002997 . Onlar gibi gidin: {561, 1105, 1729, 2465, 2821, 6601, ... }. K2olduğu OEIS A050990 ve böyle gider {4, 6, 8, 10, 12, 14, 22, 24, 26, ... }.

Senin görevin

Göreviniz bir program / fonksiyon / vb yazmaktır. iki sayı alır nve p. pKnödel Dizisinin ilk sayılarını döndürmelidir Kn.

Bu , bayt en kısa kod kazanır!

Örnekler

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
Neden 4dizide değil K_4? i^(4-4) = 1 mod 4her zaman doğrudur.
isaacg

1
@isaacg MathWorld bu ek koşula sahiptir m > n.
Martin Ender

Yanıtlar:


6

Pyth, 29 28 bayt

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

Jakube ve orlp sayesinde 1 bayt kaydedildi.

Gösteri.

Formda giriş

p
n

Oldukça basit bir hesaplama. Göreceli önceliklilik Pyth'in gcd fonksiyonu ile kontrol edilir. Bu kod .f, Pyth'in "ilk n tatmin edici" fonksiyonunu sergiliyor .

Ben değerleri m > narama başlatarak örtük koşulu dahil ettik .mn + 1


4

Haskell, 89 bayt

Çok basit uygulama. İkili işleci tanımlar 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]]

Misal:

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

2
Ne m>niçin?
rubik

Hiç bir fikrim yok. negative exponentHatalar alıyordum 21!21ve bunu ekleyerek sorunu çözdüm.
Lynn

1
Ben denemek ve kurtulmak için nasıl şekil için Haskell yüklü m>n&&değişen, bit m<-[4..]için m<-[n+1..]işe görünmektedir. Ayrıca 91 bayt sayılır!
Kade

1
Temiz! Teşekkürler, @Vioz.
Lynn

@ Vioz- Yani daha önce Haskell'i bilmeden Haskell ile uğraştın mı? Bunu nasıl yaptın?
proud 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]]

bağımsız olarak geliştirilmiş olsa da, @Marius'un cevabı ile hemen hemen aynı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.