素数总是让人着迷。2300年前,欧几里得在他的《元素》中写道
质数是仅由一个单位测量的质数。
这意味着素只能被 1
(或本身)。
人们一直在寻找素数之间的关系,并提出了一些非常奇怪的东西(如“有趣的”)。
例如,一个索菲·热尔曼质数是一个主要p
针对2*p+1
也是素数。
一个安全素是一种主要p
用于哪些(p-1)/2
也是黄金,而这正是一个索菲·热尔曼质数的倒退状态。
这些与我们在此挑战中寻找的东西有关。
一个坎宁安链型我是一系列素数,其中除了最后一个的每一个元素是的索菲·热尔曼质数,而除了第一个的每一个元素是一个安全的黄金。该链中元素的数量称为它的length。
这意味着我们从素数开始p
计算q=2*p+1
。如果也q
为质数,则我们有长度为2的I型Cunnigham链。然后进行测试2*q+1
,以此类推,直到下一个生成的数字为复合数为止。
II型坎宁安链是按照几乎相同的原理构造的,唯一的区别是我们检查了2*p-1
在每个阶段。
坎宁安链的长度可以为1,这意味着2 * p + 1和2 * p-1都不是素数。我们对这些不感兴趣。
坎宁安链的一些例子
2
启动长度为5的I型链。
2, 5, 11, 23, 47
下一个构造的数字95
不是素数。
这也告诉我们,那5
,11
,23
和47
不启动类型的任何链我,因为这将有前述的元素。
2
也开始长度为3的II型链。
2, 3, 5
接下来是9
,这不是素数。
让我们尝试II11
型(之前我们将其排除在I型之外)。
好吧,接下来是下一个,它不是素数,因此该“链”的长度为1,我们不将其计入此挑战。21
挑战
写一个程序或功能,给定一个号码
n
作为输入,写入/返回的起始数第n个的坎宁安链I或II型的至少长度为2,后跟一个空格,随后链的类型它开始(我或II),然后是冒号,然后是该类型链的长度。万一素数同时启动两种类型的链(类型I 和型 II型),则首先计算型链。例:
2 I:5
请记住,这n
可能是任何类型的先前启动链的一部分,在这种情况下,不应将其视为该类型链的起始编号。
让我们看看这是如何开始的
我们从开始2
。由于它是第一个素数,因此我们可以确定没有链从包含的较低素数开始2
。
类型I中的下一个数字将是2*2+1 == 5
。5
是素数,因此我们已经有了至少长度为2的链。
我们将其视为第一条链。那II型呢?下一个号码是2*2-1 == 3
。3
是素数,因此II型的链长也至少为2。
我们将其视为第二条链。我们已经完成了2
。
下一个素数是3
。在这里,我们应该检查一个较低的素数是否在链中开始。
检查I型:(3-1)/2 == 1
。1
不是素数,因此3可能是类型I链的起点。
让我们检查一下。接下来是3*2+1 == 7
。7
是素数,因此我们拥有长度至少为2的I型链。我们将其视为第三条链。
现在,我们检查是否3
在类型II链中出现了较低质数开始的链。
(3+1)/2 == 2
。2
是素数,因此3不能视为II型链的起始数字。因此,即使3
此链中的下一个数字是5
,是素数。(当然,我们已经知道了这一点,您当然可以并且应该考虑自己的方法如何进行这些检查。)
因此,我们检查了5
,7
,11
等,计数,直到我们找到至少长度为2的n次方坎宁安链。
然后(或者可能更早一些;)
),我们需要确定找到的链的完整长度,并以前面提到的格式打印结果。
顺便说一句:在我的测试中,除了2
使长度大于的两种链条都开始以外,我没有发现其他质数1
。
输入/输出示例
输入值
1
输出量
2 I:5
输入值
10
输出量
79 II:3
输入值
99
输出量
2129 I:2
输入1..20的输出
2 I:5 2 II:3 3:2 7 II:2 19 II:3 29我:2 31 II:2 41我:3 53我:2 79二:3 89我:6 97 II:2 113我:2 131我:2 139第二章:2 173我:2 191我:2 199第二章:2 211 II:2 229第二章:2
可在此处找到前5000个输出的列表。
这是代码高尔夫。输出中允许使用任意空格,但是如示例中所示,类型和数字应以单个空格和冒号分隔。利用任何漏洞是不允许的,尤其是获得来自Web的结果是不容许。
祝好运 :)
:)
2
并且3
是唯一的素数p
为这两个2p-1
和2p+1
是素数,所以2
是唯一的黄金,其启动两种类型的非平凡坎宁安链。