クノーデル数-Knを見つける


10

クノーデル数

クノーデル数は一連のシーケンスです。具体的には、正の整数のKnödel数は、と互いに素であるすべてがを満たすようなn合成数のセットです。特定のKnödel数のセットが示されます。(ウィキペディア)。mi < mmi^(m-n) = 1 (mod m)nKn

たとえば、K1カーマイケル番号、およびOEIS A002997です。彼らは次のようになります{561, 1105, 1729, 2465, 2821, 6601, ... }K2OEIS A050990で、のようになり{4, 6, 8, 10, 12, 14, 22, 24, 26, ... }ます。

あなたのタスク

あなたの仕事は、プログラム/関数/その他を書くことです。それには2つの数値をとり、nそしてppKnödelシーケンスの最初の数を返す必要があり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 2015

1
@isaacg MathWorldには、次の追加条件がありm > nます。
マーティンエンダー2015

回答:


6

Pyth、29 28バイト

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

Jakubeとorlpのおかげで1バイトが節約されました。

デモンストレーション。

フォームに入力

p
n

かなり簡単な計算。相対的素数はPythのgcd関数でチェックされます。このコードは.f、Pythの「最初のnを満たす」関数を紹介しています。

m > nm値の検索を開始することにより、暗黙の条件を組み込みました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ため?
ルービック2015

何も思いつきません。でnegative exponentエラーが発生し21!21、それを追加して問題を解決しました。
リン

1
私はHaskellをインストールして、m>n&&ビットを取り除く方法を見つけ出し、動作m<-[4..]するm<-[n+1..]ように変更しました。また、バイト数は91になります。
Kade

1
きちんと!ありがとう、@ Vioz。
リン

@ Vioz-では、Haskellを知らずにHaskellに干渉しましたか?どうやってやったの?
誇り高いハスケラー、2015

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の回答とほとんど同じです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.