站内搜索

编程证明出世界未解数学问题

原帖及讨论:http://bbs.bccn.net/thread-161854-1-1.html

/*
  首发于编程中国,如果确定正确且前人未证明将送发数学学会与数学杂志
  编程证明出世界未解数学问题:
  
    自然数n,使它等于它的数码的阶乘之和

  作者/证明者:中国山东烟台 芝罘区 烟台华侨学校(烟台五中) 孙锴 E-

mail: sunkai@msn.comsk-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;
}

 

  • 上一篇:带符号数表示--机器数与真值--原码
  • 下一篇:关于制作地图时矩阵的使用(适合新手)