关于查找回归数算法的实现
2011-11-04 12:12
211 查看
前两天在网上看了一篇关于回归数的文章。看完后也想自己实现一个查找回归数的算法。首先介绍一下回归数,以下是摘录了百度百科的【回归数猜想】 英国大数学家哈代(G.H.Hardy,1877-1947)曾经发现过一种有趣的现象: 153=1^3+5^3+3^3 371=3^3+7^3+1^3 370=3^3+7^3+0^3 407=4^3+0^3+7^3 *注: 1^3代表1的3次方。其他类同。 他们都是三位数且等于各位数字的三次幂之和,这种巧合不能不令人感到惊讶.更为称奇的是,一位读者看过哈代的有趣发现后,竟然构造出其值等于各位数字四(五,六)次幂之和的四(五,六)位数: 1634=1^4+6^4+3^4+4^4 54748=5^5+4^5+7^5+4^5+8^5 548834=5^6+4^6+8^6+8^6+3^6+4^6 像这种其值等于各位数字的 n 次幂之和的 n 位数,称为 n 位 n 次幂回归数.本文只讨论这种回归数,故简称为回归数,人们自然要问:对于什么样的自然数 n 有回归数?这样的 n 是有限个还是无穷多个?对于已经给定的 n ,如果有回归数,那么有多少个回归数? 1986年美国的一位数学教师安东尼.迪拉那(Anthony Diluna)巧妙地证明了使 n 位数成为回归数的 n 只有有限个. 设 An 是这样的回归数,即: An=a1a2a3...an=a1n+a2n+...+ann (其中 0<=a1,a2,...an<=9) 从而 10n-1<=An<=n9n 即 n 必须满足 n9n>10n-1 也就是 (10/9)n<10n ⑴ 随着自然数 n 的不断增大,(10/9)n 值的增加越来越快,很快就会使得 ⑴ 式不成立,因此,满足⑴的 n 不能无限增大,即 n 只能取有限多个.进一步的计算表明: (10/9)60=556.4798...<10*60=600 (10/9)61=618.3109...>10*61=610 对于 n>=61,便有 (10/9)n>10n 由此可知,使⑴式成立的自然数 n<=60.故这种回归数最多是60位数.迪拉那说,他的学生们早在1975年借助于哥伦比亚大学的计算机得到下列回归数: 一位回归数:1,2,3,4,5,6,7,8,9 二位回归数:不存在 三位回归数:153,370,371,407 四位回归数:1634,8208,9474 五位回归数:54748,92727,93084 六位回归数:548834 七位回归数:1741725,4210818,9800817 八位回归数:24678050,24678051看了上面的文章,觉得用计算机来查找回归数应该不是很难,由此我写了如下的算法来查找回归数:#include <iostream>#include <math.h>using namespace std;////////////////////////////////////////////////////////////////////////////find back number#define MAX_INT 2147483647void FindBackNumber(int nValue){for (int j = 1; j< MAX_INT; j++){int nBitCount = (int)log10((double)j);nBitCount++;if(nBitCount> nValue){return;}int m = 0;int n = j;while (n !=0){ m += (int)pow((double)(n%10),nBitCount);n /= 10;}m += (int)pow((double)(n%10),nBitCount);if(j == 153){int a = 0;}if(m == j){printf_s("%d is a back number;\r\n",j);}}}int main(){////////////////////////////////////////////////////////////////////////////find back numberFindBackNumber(7);return 0;}上面的代码在vs2008调试通过。这个算法应该还有优化的空间,可惜我没有找到,有高手找了还望不吝赐教:)
相关文章推荐
- 关于统计变换(CT/MCT/RMCT)算法的学习和实现
- 关于算法—— 一维字符串数组之间组合问题的C#实现
- 关于二叉查找树中的某个节点的前趋和后继的算法(Python实现)
- 关于游戏中拦截算法的实现
- 关于“相亲数”的算法实现
- 关于digit统计算法(C语言实现)
- 关于n!被整除的问题【算法实现】
- 关于乘方的优化算法(java实现)
- 关于拉格朗日和内维尔插值算法的python实现
- 根据学校的业务需求,主攻关于高校自动排课的算法实现
- flex+BlazeDS关于军标的实现思路和算法
- 关于“泊松分酒”的算法理解,实现遍历所有情况(JAVA)
- 关于统计变换(CT/MCT/RMCT)算法的学习和实现
- 关于《GIS 点、线缓冲区生成算法的C#实现(V0.95)》的一点备注
- 算法导论——关于快速排序的实现(c语言实现)
- 关于j2me实现拼图游戏的算法实现
- 关于cs231n作业1中KNN算法实现的感悟
- 关于百分位数的算法实现
- 关于若干选举算法的解释与实现
- 关于统计变换(CT/MCT/RMCT)算法的学习和实现,也称为局部二进制模式(LBP)