原帖及讨论:http://bbs.bccn.net/thread-161854-1-1.html /* 首发于编程中国,如果确定正确且前人未证明将送发数学学会与数学杂志 编程证明出世界未解数学问题: 自然数n,使它等于它的数码的阶乘之和 作者/证明者:中国山东烟台 芝罘区 烟台华侨学校(烟台五中) 孙锴 E- mail: sunkai@msn.com 或 sk-china@tom.com 首发见证:编程中国 首发日期见证:编程中国 谢绝转载,本人原创证明,著作权所有 */ /* 证明结果: 自然数n,使它等于它的数码的阶乘之和有且只有四个数:1,2,145,40585 计算机证明思路: 因为涉及许多计算,由计算机对所有七位以及七位之内的数(1--9999999)用 定义套算,得出可以满足定义的七位以及七位之内的所有数 又因为当自然数n为8位时 表达为 -------- abcdefgh a,b,c,d,e,f,g,h最大值为9,所以max(a!)=9!=362880 所以max(a+b+c+d+e+f+g+h)=9!+9!+9!+9!+9!+9!+9!+9!=2903040,为一7位 数,所以当n为8位或8位以上时,不存在自然数n,使它等于它的数码的阶乘之和 */ /*计算程序:在DEV-CPP 4.9.9.2(GCC编译核心) 下编译通过*/ #include<stdio.h> #include<string.h> int main(void) { long s[10]; long i; char p[8]; long sum; int k,j; int n=0; s[0]=1; printf("证明计算:/n"); for(i=1;i<10;i++) s[i]=s[i-1]*i; for(i=1;i<10000000;i++) { if(i%10000==0) printf("/r已计算到 %ld",i); sprintf(p,"%ld",i); k=0; sum=0; while(p[k]!='/0') { p[k]=p[k]-'0'; k++; } for(j=0;j<k;j++) sum+=s[p[j]]; if(sum==i) { printf("/r发现满足数字:%ld/n",sum); n++; } } printf("/r计算完成 1--9999999/n"); printf("由于9!=%ld,而当数为8位或8位以上时,即使各位均为9,结果也只是 8*9!=%ld,一个7位数,因此,当数字超过7位后,不可能再出现自然数满足原等式.因 此证明满足原式的数只有以上计算得出的%d个自然数.",s[9],8*s[9],n); getch(); return 0; }
|