首页 > 编程资源分享区 > C/C++源代码共享 > 编程证明出世界未解数学问题
2007
08-24

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

/*
  首发于编程中国,如果确定正确且前人未证明将送发数学学会与数学杂志
  编程证明出世界未解数学问题:
  
    自然数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;
}


留下一个回复