生活在计算机时代,我一直对计算机出现之前可以做多少算术感到着迷。埃及人在建造金字塔时就知道农民的乘法。阿基米德在基督诞生前两个世纪就知道圆周率的值,现在仍在使用近似值。Heron在两千年前就有一个计算平方根的算法。等等。
在费马、欧拉和高斯时代,算术是用简单的算法、经验法则和大表格完成的。可悲的是,表格经常出错;查尔斯·巴贝奇(Charles Babbage)发明了差分引擎(Difference Engine),用于自动构建精确的表格。
我们在前面的练习中研究了费马整数分解算法:
函数fermat(n)
x:=楼层(平方米(n))
r:=x*x-n
t:=2*x+1
而r不是正方形
r:=r+t
t:=t+2
x:=(t-1)/2
y:=平方(r)
返回x-y,x+y
但费马实际上是如何实现他的算法的呢?除了基本的算术之外,他还使用了一些简单的规则来识别正方形,并使用了一个类似于下一页,最大的正方形至少与n个.
让我们考虑n个例如=13290059。首先,费马通过试验划分删除了小因子,比如小于30或50的因子。然后,费马抬起头来n个在表中。如果n个出现在表体中,那么它就是一个完美的平方,平方根就是它的因子。但在一般情况下,费马发现x个作为表中下一个较小条目的平方根。对于13290059,x个=3645,因为36452< 13290059 < 36462.然后t吨=7291和第页=-4034,这不是一个完美的正方形(因为它是负数)。
现在迭代开始了。费马计算第页和t吨按照以下45个步骤,首先第页,然后t吨下面是一条求和线,然后是求和第页=第页+t吨,然后t吨比上一个增加2t吨,然后是求和行,然后是新的求和第页,在每个步骤检查第页是一个正方形:
0:r=-4034=3645*3645-13290059t=7291=2*3645+1------1:r=3257以7结尾;不是正方形t=7293=7291+2------2:r=10550以50结束;不是正方形t=7295=7293+2------3:r=17845以45结束;不是正方形...44:r=318662以2结尾;不是正方形t=7381=7379+2------45:r=326041,表571*571
此时,费马可以计算n个:x个=(7381–1)/2=3690,年=571,以及系数n个是x个负极年=3690−571=3119和x个+年= 3690 + 571 = 4261.
费马计算的关键是确定案例第页是一个正方形。费马使用了三条规则:首先,数字的最后两位必须是00,电子1,电子4, 25,o(o)6或电子9,其中电子是任意偶数o(o)是任意奇数。其次,数字的数字根必须是1、4、7或9:n个; 如果结果小于10,则返回数字和,否则返回数字和的数字根。实际上,这比“剔除九”要快得多n个或结果。第三,如果他还没有确定这个数字不是一个正方形,他会在他的方格表中查找它。整个计算过程比我在这里描述的要快得多。
这就是费马计算整数的方法。当然,有时他会失败,因为他需要多次迭代才能找到一个正方形,或者他的方格表太小,或者他在算术中出错。幸运的是,他很容易通过乘以因子来确认他发现的任何因子分解都是正确的。
你的任务是编写一个程序,用与费马计算整数相同的方法计算整数。完成后,欢迎您阅读或运行建议的解决方案,或者在下面的评论中发布你自己的解决方案或讨论该程序。
页:1 2 三