简介/背景
在最近一次关于加密聊天的讨论中,我被挑战去讨论/帮助Fermat素数测试和Carmichael数字。该测试基于a^(p-1) mod p==1
始终适用于素数p
而不适用于复合材料的前提。现在,carmichael号码本质上是Fermat考验的最大敌人:您必须选择一个号码,a
以使其不与素数p
相抵a^(p-1) mod p!=1
。现在,如果a
不是互质,则基本上可以发现一个非平凡的因子p
众所周知,保理可能相当困难。特别是在所有因素都足够大的情况下。您现在可能已经意识到,为什么在实践中不经常使用Fermat测试(还有更好的算法),这是因为作为防御者(在安全性方面)您需要为某些数字做与攻击者(即数量)。
因此,既然我们知道为什么这些数字有些引人入胜,我们将以最短的方式生成它们,因此只要需要,我们就可以记住生成的代码!
Carmichael编号在OEIS上也称为A002997。已经
存在一个相关的挑战,但是这里的条目没有竞争力,因为它们是针对速度而非大小进行了优化的。同样的论点也适用于反方向,此处的输入可能会在速度上做出取舍,而有利于大小。
规格
输入项
这是一个标准 序列挑战,因此您将正整数或非负整数n
作为输入。n
可以根据需要选择0或1的索引(请指出)。
输出量
根据需要,您的输出将是n
-th carmichael数或第一个n
carmichael数(请指出)。
规格
一个整数x
是卡迈克尔数当且仅当x
是复合材料和所有的整数y
与gcd(x,y)=1
,它认为y^(x-1) mod x==1
。
谁赢?
这是 代码高尔夫球,因此以字节为单位的最短代码获胜!
适用标准IO和漏洞规则。
测试用例
前几个carmichael号码是:
561,1105,1729,2465,2821,6601,8911,10585,15841,
29341,41041,46657,52633,62745,63973,75361,101101,
115921,126217,162401,172081,188461,252601,278545,
294409,314821,334153,340561,399001,410041,449065,
488881,512461