/*
首发于编程中国,如果确定正确且前人未证明将送发数学学会与数学杂志
编程证明出世界未解数学问题:
自然数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;
}
[此贴子已经被作者于2007-8-10 22:27:16编辑过]