挑战
找到可以通过查表测试二次残基集的最小基数(例如,模),以确定给定的非负整数n是否为理想平方。所有底数都必须小于或等于n的最大值的平方根。
给定类别n的基数最小的答案将赢得挑战。(这意味着可能有一个以上的获胜者。)n的类别为:
Category Maximum allowed n Maximum allowed modulus/base
------------- -------------------- ----------------------------
8-bit values 255 15
16-bit values 65535 255
32-bit values 4294967295 65535
64-bit values 18446744073709551615 4294967295
如果两个基数相等的平局出现平局,则平局将转到具有更大能力以较早地检测非平方的组。
如果没有找到完整的封面(对于32位和64位类别来说完全有可能),则获胜者将是一组从统计学上或经证明可排除最高百分比的非平方数的基数(无误)将正方形报告为非正方形)。有关不完整保险单的讨论,请参见下文。
背景
在许多数论应用中,会出现一个问题,即某个数n是否为一个完美的平方(0、1、4、9、16、25、36、49、64、81、100等)。测试的一个方法是否Ñ是正方形是测试是否地板(√N)2 = N,即是否圆形向下的平方根Ñ,平方时,还给Ñ。例如,floor(√123)²=11²= 121,它不是123,所以123不是正方形。但是楼板(√121)²=11²= 121,所以121是正方形。此方法适用于少量数字,特别是在可用硬件平方根运算的情况下。但是对于大量(数百或数千位)的数据,它可能会非常慢。
测试正方形性的另一种方法是使用二次残差表排除非正方形。例如,以10为底的所有平方必须有一个最终的(一位)数字,该数字为0、1、4、5、6或9。这些值构成以10为底的二次残差集。 -10号以0、1、4、5、6或9结尾,您知道它可能是方形的,因此需要进一步检查。但是,如果以10为底的数字以2、3、7或8结尾,则可以确定它不是平方。
因此,让我们看看另一个基础。以8为底的所有平方必须以0、1或4结尾,方便地,这只是8种可能性中的3种,这意味着一个随机数可能为平方的概率为37.5%,或者一个绝对数不是平方的概率为62.5%。这些比基数10给出的几率要好得多。(并且请注意,以8为底的模数运算只是一个逻辑与运算,而不是以10为底的模数除以10并除以余数。)
有更好的基础吗?好吧,是的,实际上。基础120有18种可能性(0、1、4、9、16、24、25、36、40、49、60、64、76、81、84、96、100和105),仅占15%可能是正方形的机会。而基数240更好,只有24种可能性,仅代表10%的可能是正方形。
但是,没有一个单独的基数可以单独确定平方度(除非它大于要测试的最大数,这是不切实际的)。一个单一的基地只能排除方形性。它不能最终验证方形性。只有精心选择的一组基础一起使用,才能最终验证整数范围内的直角性。
因此,问题就变成了:哪一组基形成最小的覆盖范围,这些覆盖范围一起可以确定性地推算出正方形度或非正方形度?
正确但非最小保障的示例
以盖子16为基础的盖子{3、4、5、7、8、11、13、16、17、19、23、25、29、31、37}足以确定底角的正方形或非正方形。所有 16位值0到65535。但这不是最小覆盖率,因为至少存在一个15基覆盖率,而且很容易发现。实际上,很可能存在较小的掩护-可能只有6或7个碱基。
但为说明起见,让我们看一下使用此16基覆盖集测试n的样本值。这是上述碱基集的二次残基集:
Base m Quadratic residue table specific to base m
------ ----------------------------------------------------
3 {0,1}
4 {0,1}
5 {0,1,4}
7 {0,1,2,4}
8 {0,1,4}
9 {0,1,4,7}
11 {0,1,3,4,5,9}
13 {0,1,3,4,9,10,12}
16 {0,1,4,9}
17 {0,1,2,4,8,9,13,15,16}
19 {0,1,4,5,6,7,9,11,16,17}
23 {0,1,2,3,4,6,8,9,12,13,16,18}
25 {0,1,4,6,9,11,14,16,19,21,24}
29 {0,1,4,5,6,7,9,13,16,20,22,23,24,25,28}
31 {0,1,2,4,5,7,8,9,10,14,16,18,19,20,25,28}
37 {0,1,3,4,7,9,10,11,12,16,21,25,26,27,28,30,33,34,36}
现在,通过将这组底数转换为每个底数,来测试数字n = 50401。(这不是检查残基的最有效方法,但足以用于解释目的。)这是我们在此处感兴趣的位置1(在下面的括号中标记):
Base "Digits" in base m
m m^9 m^8 m^7 m^6 m^5 m^4 m^3 m^2 m^1 ( m^0 )
---- -----------------------------------------------------------------
3 2 1 2 0 0 1 0 2 0 ( 1 ) ✓
4 3 0 1 0 3 2 0 ( 1 ) ✓
5 3 1 0 3 1 0 ( 1 ) ✓
7 2 6 6 6 4 ( 1 ) ✓
8 1 4 2 3 4 ( 1 ) ✓
9 7 6 1 2 ( 1 ) ✓
11 3 4 9 5 ( 10 )
13 1 9 12 3 ( 0 ) ✓
16 12 4 14 ( 1 ) ✓
17 10 4 6 ( 13 ) ✓
19 7 6 11 ( 13 )
23 4 3 6 ( 8 ) ✓
25 3 5 16 ( 1 ) ✓
29 2 1 26 ( 28 ) ✓
31 1 21 13 ( 26 )
37 36 30 ( 7 ) ✓
因此我们可以看到,在这些碱基中的13个中,残基与已知的二次残基相匹配(在表中称其为“命中”),在这些碱基中的3个中,残基与已知的二次残基不匹配(称其为a)。 “小姐”)。只需要1个小姐就可以知道一个数字是非平方的,所以我们可以停在11点,但是出于说明目的,我们在这里检查了所有16个碱基。
封面不完整的示例
从技术上讲,不完整的掩盖并不是掩盖,但这是重点。基数集{7,8,11,15} 几乎正确覆盖了n的所有8位值(从0到255),但不是完全。特别是,它错误地将60和240标识为正方形(这些是误报),但会正确标识所有实际正方形(0、1、4、9、16、25、36、49、64、81, 100、121、144、169、196和225),并且没有其他误报。因此,这是一个四集式解决方案,几乎可以成功解决,但最终会失败,因为不完整的封面不是有效的解决方案。
对于8位n,基集{7、8、11、15}是产生4个错误的2组4个基中的一个,而有7个4个基的组仅产生1个错误。实际上,没有4个基数的集合构成8位值的完整而准确的覆盖。您能否找到一组5个不会产生错误的基数,正确覆盖所有8位值?还是需要6个或更多?(我确实知道8位n的答案,但是我不会放弃。我不知道16位,32位或64位的答案,而且我相信16位通过强力搜索无法解决位大小写的情况。解决32位和64位的情况肯定需要遗传,启发式或其他搜索技术。
关于密码大数的评论
除了64位数字(最多成百上千个二进制数字)之外,即使覆盖物不完整(这对于真正的大数字也是如此),这才是最方便快速进行矩形检查的地方。即使这样的测试没有足够的决定性,它怎么仍然有用呢?好吧,假设您对方形度进行了非常快速的测试,该测试在99.9%的时间内正常工作,而在剩余的0.1%的时间内给出假阴性,而从未给出假阳性。通过这样的测试,您将能够立即确定一个数的非平方性,然后在优柔寡断的情况下,您可以采用较慢的方法以另一种方式解决未知数。这样可以节省您很多时间。
例如,集合{8,11,13,15}是正确的时间的8位值99.61%Ñ从0到255,是正确的时间95.98%为16位值Ñ从0到65535,并且对于n的 24位值(从0到16777215 )正确的时间是95.62%。随着n达到无穷大,这组基数的正确性百分比下降,但是它渐近地接近并且永远不会下降到95.5944%以下正确性。
因此,即使是这很小的4个小基数集,也几乎可以立即将23个任意大的数字中的大约22个识别为非平方数,从而无需通过较慢的方法进一步检查这些数字。然后,仅在少数情况下才可以采用较慢的方法,而这种快速测试无法排除这种情况。
有趣的是,有些16位基准本身就可以达到95%以上的性能。实际上,下面的每个底基都能消除掉所有数的97%,直到达到无穷大为止,因为它们不是正方形。可以仅使用8192个字节将每个基数的二次余数表示为打包位数组。
以下是小于2 ^ 16的10个最强大的单碱基:
Rank Base Prime factorization Weeds out
---- ------------------------------ ---------
1. 65520 = 2^4 x 3^2 x 5 x 7 x 13 97.95%
2. 55440 = 2^4 x 3^2 x 5 x 7 x 11 97.92%
3. 50400 = 2^5 x 3^2 x 5^2 x 7 97.56%
4. 52416 = 2^6 x 3^2 x 7 x 13 97.44%
5. 61200 = 2^4 x 3^2 x 5^2 x 17 97.41%
6. 44352 = 2^6 x 3^2 x 7 x 11 97.40%
7. 63360 = 2^7 x 3^2 x 5 x 11 97.39%
8. 60480 = 2^6 x 3^3 x 5 x 7 97.38%
9. 63840 = 2^5 x 3 x 5 x 7 x 19 97.37%
10. 54720 = 2^6 x 3^2 x 5 x 19 97.37%
看到这些基地有什么共同点吗?没有理由认为它们结合在一起可能有用(也许是有用的,也许不是),但是这里有一些很好的线索表明,对于更大范围的数字而言,最有影响力的基础是什么。
侧挑战:其中最有影响力的基地(如果不是在大多数)达到2 ^ 28是245044800,只有这样才能正确地淘汰非正方形的99.67%,或大约在它抛出307张随机数的306。你能找到的最有影响力的单碱基小于2 ^ 32?
有关
在以下密切相关的问题中,有一些很好的主意,还有一些微优化技巧可以使某些操作更快。尽管没有专门列出链接的问题来找到最强的基础集,但是强基础的思想隐含着其中使用的一些优化技术。