自守数的计算探讨
何谓自守数?
在郭先强先生编写的Automorphic Number程序中进行了如下的定义:
【自守数】(在十进位制中,) 若一个 k 位正整数 N (可含前置 "0" ), 若满足如下性质: 任意两个或多个均以该字串 N 结尾的整数相乘, 其结果的最后 k 位数字一定还是 N, 那么, 则称 N 为 "k 位自守数".
前几日偶然访问到下面的页面
http://zhjyx.hfjy.net.cn/Resource/Book/Edu/SZJY/TS007047/0004_ts007047.htm
在这个页面中介绍了下面的方程的两个无限解(0和1是两个显然的解)
x^2=x
由此受到启发,编写的一段代码,经过一周左右的反复修改,实现了用计算机来快速求小于等于1,000,000,000的自守数。(事实上以现在的计算机速度和内存,计算10^8以下的数据比较现实一些)
我的代码是以VC编写的一个控制台程序,使用内联汇编,未采用MMX或SSE等指令集,只使用了普能的X86指令。速度与郭先生的程序相比,在位数较小时,比如10万以下,略慢一点(小于1s),但在50万以上,速度略快,大约快2-3%左右。本人对MMX和SSE指令不熟悉,如果用其来优化核心代码,可能速度还能提高。
算法的核心就是如何求5的2^n次方(但不需要求出全部数据,而只需要取低n位十进制数)。
如有兴趣者,可以查看上面的页面,也可与我讨论.需要代码请发邮件给我:
myh9999@vip.sina.com
待我整理好代码后,将贴出我的代码