六六大顺

原创 2017年01月03日 11:13:27

某古寺的转经筒上贴有6个小圆圈(如图),每个小圆圈中有一个数字,通过专家长期研究后揭示这6个象征祥瑞的数字呈现“六六大顺”特性:

  • 从任一数字开始,顺时针旋转一周得到一个6位数,在得到的所有6个6位数中,设最小的整数为m,其余5个都是m的倍数

转经筒上的6个小圆圈示意图

试求出转经筒上6个数字的分布及最小的6位整数m;


6个整数

1.说明:

(1)、设置枚举循环

显然整数m的6个数字中不含“0”,否则其余5个数中会出现5位数,同时整数m的首位数字为1,否则m的5个倍数中肯定会出现超过6位数;

因而设置m(123456~198765)枚举循环;

(2)、构造旋转整数

对每一个6位整数m通过k(2~6)循环产生其余5个6位整数:

  • 当k=2时,c=10,d=100000,通过i=m/c;j=m%c;n=j*d+i;产生一个旋转整数

  • 当k=3时,c=100,d=10000,通过i=m/c;j=m%c;n=j*d+i;又产生一个旋转整数

  • · · · · · ·

(3)、判别5个倍数

对每一个产生的旋转整数n,判别是否是m的倍数,若n是m的倍数,用x统计倍数的个数;

(4)、打印输出

最后,若x=5(即有5个倍数),则输出整数m,并依次输出其他5个旋转倍数;

2.程序设计:

#include<stdio.h>
int main()
{
   long c,d,i,j,m,n;
   int k,x;
   for(m=123456;m<=198765;m++)      /*枚举首位为1的6位数*/
   {
      x=0;
      for(c=1,k=2;k<=6;k++)
      {
         c=c*10;
         d=1000000/c;
         i=m/c;
         j=m%c;
         n=j*d+i;          /*产生m的一个旋转整数n*/
         if(n%m==0 && n!=m)     /*统计n是m倍数的个数*/
            x++;
      }
      if(x==5)
      {
         printf("六六大顺数m为:%ld \n",m);
         break;
      }
   }
   for(c=1,k=2;k<=6;k++)
   {
      c=c*10;
      d=1000000/c;
      i=m/c;
      j=m%c;
      n=j*d+i;            /*依次输出m的旋转整数n*/
      printf("m旋转得数:%ld=%ld*%ld \n",n,n/m,m);
   }
}

3.程序运行示例及其注意事项:

六六大顺数m为:142857
m旋转得数:714285=5*142857
m旋转得数:571428=4*142857
m旋转得数:857142=6*142857
m旋转得数:285714=2*142857
m旋转得数:428571=3*142857

由运行可知,满足要求m的5个旋转数都是m的倍数,这样的m是唯一的,也就是说,转经筒上所贴神秘数字序列是唯一的,如图所示:

转经筒上6个数字分布图

顺便指出,以上所得六六大顺数m的7倍更为神奇: 142857*7=999999


延伸探索

1.说明:

自然延伸到一般w个数字是否存在类似特性的w位整数?

或者对一般w个数字,我们放宽要求:

  • 探索在其余w-1个旋转整数中至少存在2个倍数

2.程序设计:

#include<stdio.h>
int main()
{
   long c,d,i,j,m,n,t,p[10];
   int k,w,x;
   printf("请输入位数w:");
   scanf("%d",&w);
   t=1;
   for(k=1;k<=w;k++)
      t=t*10;
   for(m=t/10;m<=t/2;m++)    /*枚举w位数*/
   {
      x=0;
      for(k=0;k<=9;k++)
         p[k]=0;
      for(c=1,k=2;k<=w;k++)
      {
         c=c*10;
         d=t/c;
         i=m/c;
         j=m%c;
         n=j*d+i;         /*n为m的一个换位数*/
         if(n!=m && n%m==0)
         {
            x++;
            p[n/m]=n;
         }
      }
      if(x>=2)
      {
         printf("%ld:  ",m);
         for(k=2;k<=9;k++)
            if(p[k]>0)
               printf("%ld*%ld=%ld ",m,k,p[k]);
         printf("\n");
      }
   }
}

3.程序运行示例及其注意事项:

请输入位数w:6
142857:  142857*2=285714 142857*3=428571 142857*4=571428 142857*5=714285 142857*6=857142
153846:  153846*3=461538 153846*4=615384
230769:  230769*3=692307 230769*4=923076
285714:  285714*2=571428 285714*3=857142

注意:输入位数w为其他值时,没有任何输出,甚至放宽至其余w-1个旋转整数中至少存在一个倍数都没有

版权声明:本文为博主原创文章,博主欢迎大家转载!

相关文章推荐

作家六六事件,直面情变:死撑只会沦为笑柄

这两天稍稍关注下新闻都知道作家六六的事,也很多人在作评论,都是支持六六的,六六会不会因此感到丝毫的安慰。      人生一世总是战斗不断呀,职场上的人际关系,工作上的难题,生活的繁琐事,身体上的疾病...

Pro Android学习笔记(六六):安全和权限(3):Provider权限

访问其他应用的content provider 我们在ProPermission中提供了一个content provider,成为PrivProvider,然后在ProPermissionCli...
  • SQ_Bang
  • SQ_Bang
  • 2016年08月22日 20:06
  • 160

怒的背后(六六)

我连发两天微博,怒骂一切不合规矩和不讲道理的人。 第一天说的是,巴黎戴高乐机场内,一名中国老人拿出国内惯用的吵闹政策,差点把人家值机柜台砸了,要求不是自己航空公司的值机柜台给自己办票...

[zt]拿两千块钱的薪水要有一万块的范儿--六六

这两天各大报章都在刊载我的收入几年翻了三十倍的消息。 benxi.bbs.house.sina.com.cn: y( z0 ~% o1 ^ benxi.bbs.house.sina.com.cn...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:六六大顺
举报原因:
原因补充:

(最多只允许输入30个字)