Knödel数字-查找Kn


10

克诺德尔数

克诺德尔数是一组序列。具体而言,马铃薯丸子号码的正整数n是该组合数m,使得所有i < m互质m,满足i^(m-n) = 1 (mod m)n表示特定的Knödel数集Kn。(维基百科)。

例如,K1Carmichael编号OEIS A002997。他们去,如:{561, 1105, 1729, 2465, 2821, 6601, ... }K2OEIS A050990,就像这样{4, 6, 8, 10, 12, 14, 22, 24, 26, ... }

你的任务

您的任务是编写程序/函数/等。需要两个数字,np。它应该返回pKnö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_4i^(4-4) = 1 mod 4永远是真的。
isaacg 2015年

1
@isaacg MathWorld具有以下附加条件m > n
马丁·恩德

Answers:


6

Pyth,29 28字节

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

感谢Jakube和orlp,节省了1个字节。

示范。

输入形式

p
n

相当简单的计算。通过Pyth的gcd函数检查相对质数。该代码展示了.fPyth的“前n个令人满意”的功能。

我并入了隐式条件,即m > n从开始搜索mn + 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的字节数!
卡德,2015年

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的答案几乎相同。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.