趣味数学及编程拓展
上QQ阅读APP看书,第一时间看更新

1.2 倍和数与倍积数

本节介绍涉及自身数字构成的另一类新颖整数:优美倍和数与倍积数。

这类整数的“优美”是指其组成数字不重复,“和”是指组成该数的各数字之和,“积”是指组成该数的各数字之积。

1.2.1 优美倍和数

定义:由n个互不相同的数字(可含数字0)组成的n位整数x若是其n个数字之和s的整数m倍,即有

x=m×s

则称整数x为n位优美倍和数,整数m为对应的倍数。

例如,上面求得的水仙花数407的3个数字之和为11,407=37×11,407就是一个3位优美倍和数,37为相应倍数。

【问题1】 试求3位优美倍和数的倍数m的最大值。

【思考】 以m的表达式为依据,逐个数字试验探求。

设3位优美倍和数x的3个互不相同数字为a,b,c,即x=100a+10b+c,s=a+b+c,则

由表达式看,分母中a,b,c是平等的,但分子就不一样了,相差很大。

基本思路:求取倍数m最大时,通常取a>b>c,当然以x能被s整除为前提。若x不能被s整除,则通常在较小的数字b,c中局部调整。

据式(1),要使m最大,在x能被s整除的前提下,取c尽可能小,不妨取c=0,则

据式(2),对任何a取值,要使m最大,b尽可能取最小,不妨取b=1,即有

据式(3),要使m最大,a可取最大9,此时m=91。

若取0<c≤9,可知m<91。

因而得:倍数m最大的3位优美倍和数为910,其相应的最大倍数为91。

【问题2】 探求3位优美倍和数的倍数m的最小值。

【思考】 同样以m的表达式为依据,逐个数字试验探求。

为求取倍数m的最小值,通常取a<b<c,同样以x能被s整除为前提。若x不能被s整除,则在数字b,c中局部调整。

据式(1),取a=1,即有

由上式可知要使m最小,c应取最大,因而c从9开始递减取值。

若取c=9,则,无论b取何值,m非整数,不符合要求。

若取c=8,则,要使m为整数,取b=9,得m=11;或取b=0,得m=12。

因而可得:a=1时,取x=198得m=11为最小。

据式(1),取a=2,有

由上式可知要使m最小,c尽可能取最大,因而c从9开始递减取值。

若取c=9,则,要使m为整数,则取b=0,得m=19,显然大于11。

若取c=8,则,要使m为整数,则取b=2(与a相同,舍去)或b=8(与c相同,舍去)。

若取c=7,则,要使m为整数,则取b=4,得m=19,显然大于11。

依此a逐一递增取值,得m均大于11。

因而得:倍数m最小的3位优美倍和数为x=198,其相应的最小倍数为m=11。

【拓展】 探索n位优美倍和数及其倍数m的最大值与最小值。

输入正整数n(2≤n≤9),统计n位优美倍和数的个数,求出倍数m的最大值与最小值,并输出对应m最大与最小时的n位优美倍和数。

1. 设计要点

(1)枚举与分离数字。首先通过循环求出n位没有重复数字的最小与最大整数a,b,然后设置x(a~b)循环枚举n位整数;然后对每一个n位整数x应用整除/与取余%操作,分离x的n个数字k;最后通过求和s+=k;得到x的n个数字和s。

(2)统计与判别。应用f数组f[k]++;统计数字k的频数,以便排除各数字k存在相等的情形;然后判别x能否被s整除:若x能被s整除,则产生一个n位优美倍和数x及其倍数m=x/s,用变量i统计优美倍和数个数。

(3)比较求最值。通过比较求取倍数m的最大值max与最小值min,并分别记录m最大、最小时的x与s的值,为输出m最大与最小时的优美倍和数提供数据。

2. 探求程序设计
3. 程序运行示例与变通
     请输入位数n(2≤n≤9):4
     4位优美倍和数共645个。
     倍数m最大为760:9120=760×12
     倍数m最小为61:1098=61×18

如果输入n=3,即可得3位优美倍和数的个数及它们的倍数的最大值与最小值。

当n比较大时,例如n=8,9,程序的运行相应变慢。建议通过输入不同整数n值运行程序,具体感受枚举时间的差异。

变通:把组成数字排除0,保留n个数字互不相同,即组成n位整数的n个数字限定为互不相同的正数。

在以上搜索程序中测试整数x是否有重复数字时还需测试n个数字是否含0,即把程序中的测试条件进行以下改变:f[k]>1改为f[k]>1||f[0]>0。这一变通,可得n位不含0的优美倍和数的相应结果。例如,当n=4时,程序运行结果如下所示。

     请输入位数n(2≤n≤9):4
     4位优美倍和数共322个。
     倍数m最大为534:9612=534×18
     倍数m最小为71:1278=71×18

1.2.2 优美倍积数

定义:由n个互不相同的非零数字组成的n位整数x若是其n个数字之积t的整数m倍,即有

x=m×t

则称整数x为n位优美倍积数,整数m为对应的倍数。

例如,3276的4个数字之积为252,3276=13×252,3276就是一个4位优美倍积数,13为对应倍数。

输入正整数n(2≤n≤9),探求n位优美倍积数的个数,及n位优美倍积数的倍数m的最大值与最小值,并输出倍数m最大与最小时对应的n位优美倍积数。

对于某些n,若没有相应的n位优美倍积数,则予以指出。

1. 编程设计要点

(1)枚举与分离。首先求出n位没有重复非零数字的最小与最大整数a,b,然后设置x(a~b)循环枚举n位整数;对每一个n位整数x应用整除/与取余%操作,分解x的n个数字k;通过求积t∗=k;得到x的n个数字之积t。

(2)统计与判别。对每一整数应用f数组f[k]++;统计数字k的频数,以排除各数字k存在相等(f[k]>1)的情形;然后判别x能否被t整除:若x能被t整除,则产生一个n位优美倍积数x及其倍数m=x/t,用变量i统计优美倍积数个数。

(3)比较求最值。通过比较求取倍数m的最大值max与最小值min,并分别记录m最大、最小时的x与t的值,为输出m最大与最小时的优美倍积数提供数据。

2. 探求n位优美倍积数程序设计
3. 程序运行示例与说明
     请输入位数n(2≤n≤9):5
     5位优美倍积数共9个。
     倍数m最大为167:64128=167×384
     倍数m最小为19:12768=19×672

请修改程序,输出指定n位所有优美倍积数。

这里引申出一个新的问题:对于指定的位数n,是否存在n位优美倍和同时倍积的整数?

4. 引申探求n位优美倍和积数

定义:如果n位整数x是优美倍和数,也是优美倍积数,则称x为n位优美倍和积数。

例如,3位整数216,其数字之和为9,216=24×9;同时其数字之积为12,216=18×12;可见216就是一个3位优美倍和积数。

试修改以上程序,搜索并输出指定n位所有优美倍和积数。

修改:

(1)增加统计数字和变量s,以及数字和的倍数j。

(2)求数字积时,同时求数字和:t∗=k;s+=k;(s需先清零)

(3)判别数字积的倍数,同时判别数字和的倍数:(x%t==0&&x%s==0)

(4)计算数字积的倍数,同时计算数字和的倍数:m=x/t;j=x/s;

(5)修改输出语句,并删除有关最大最小操作。

例如,指定n=5时,程序运行结果如下所示。

     请输入位数n(2≤n≤9):5
     1:12768=532×24,12768=19×672
     2:13248=736×18,13248=69×192
     3:13824=768×18,13824=72×192
     4:18432=1024×18,18432=96×192
     5:61824=2944×21,61824=161×384
     5位优美倍和积数共5个。

显然,以上输出的5个5位优美倍和积数是上面9个5位优美倍积数的一个子集。其中,第2,3,4个优美倍和积数都是由1,2,3,4,8通过不同排列组成的5位数,以后将其称为“变序数”。