【读书笔记】趣味数学及编程拓展(第2版) 第1章
第1章神奇整数探求
1.1 水仙花数与兰德尔数
兰德尔(Randle)数又称自方幂数。
兰德尔数:一个n(n≥3)位正整数如果等于它的n个数字的n次幂之和,那么该数称为n位兰德尔数,又称自方幂数。
如:370 = 3的三次方 + 7的三次方 = 27 + 343 = 370
当n=3时称为水仙花数,当n=4时称为四叶玫瑰花数,当n=5时称为五角星数,当n=6时称为六合数,当n=7时称为北斗七星数,当n=8时称为八仙数,等等。
【编程题】
搜索n(3 ≤ n≤ 8)位兰德尔数。
1.2 倍和数与倍积数
由n个互不相同的数字(可含数字0)组成的n位整数x,若是其n个数字之和s的整数m倍,即有x=m×s,则称整数x为n位优美倍和数,整数m为对应的倍数。
如:407的3个数字之和为11,407=37×11,407就是一个3位优美倍和数,37为相应倍数。
【编程题】
探索n位优美倍和数及其倍数m的最大值与最小值。
输入正整数n(2≤n≤9),统计n位优美倍和数的个数,求出倍数m的最大值与最小值,并输出对应m最大与最小时的n位优美倍和数。
由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位优美倍积数。
1.3 平方数汇趣
一个整数的2次幂称为平方数(又称完全平方数)。例如,36是6的平方,121是11的平方。
【编程题】
连续写偶数个a,再连续写位数为其一半的2a。搜索哪些数是平方数。
为确保2a为一个数字,要求键盘输入a为1,2,3,4。
【编程题】
搜索全为偶数数字组成且末位非零的n位平方数。
【编程题】
不含重复数字的完全平方数称为优美平方数。
从键盘输入指定位数n及指定排除数字个数m(m+n ≤ 10),并依次输入m个排除数字,输出所有满足以上要求的平方数。
1.4 勾股数与长方体数
把满足三元二次方程式x^2 + y^2 = z^2 的正整数解x,y,z称为一组勾股数,又称毕达哥拉斯数。如,著名的勾三股四弦五。
【编程题】
探求并输出指定区间[a, b]内的所有勾股数组。
如果长方体的棱长x, y, z和长方体对角线长w都是正整数,那么把它们称为一组长方体数,满足x^2 + y^2 + z^2 = w^2
【编程题】
输出区间[a, b](1≤a<b<10000)内的长方体数组。
在区间[a, b]内搜寻6个整数,其中3个整数是长方体的长、宽、高,另3个整数是该长方体的6个面的对角线长。
1.5 完全数与p-完全数
若正整数n的所有小于n的正因数之和等于n本身,则称数n为完全数,又称完美数。
如6的小于6的正因数为1,2,3,而6 = 1+2+3,则6是一个完全数。
设正整数a的小于其本身的因数之和为s,定义比值p(a) = s/a为整数a的因数比。
若整数的因数比为某一大于1的整数p,则称该整数为p-完全数。
如p(120) = 2,则120为2-完全数;p(32760) = 3,则32760为3-完全数
【编程题】
探求指定区间[x, y]中的完全数和p-完全数。
1.6 卡普雷卡数
如整数等于分两段和的平方,称为卡普雷卡数
如 3025 = (30 + 25) ^2
【编程题】
探索偶数n位卡普雷卡数:偶数n位整数分为前后两个n/2位整数,该数等于所分两个数和的平方。
1.7 雅趣守形数
若正整数n是它平方数的尾部,则称n为守形数,又称同构数。
如,6是其平方数36的尾部,25是其平方数625的尾部,6和25都是守形数。
【编程题】
探求指定区间[x, y]中的所有守形数。
1.8 逐位整除数
定义n位逐位整除数:从高位开始,高1位能被1整除,高2位能被2整除,高3位能被3整除,以此类推,直至整个n位数能被n整除。
如,102456就是一个6位逐位整除数。
【编程题】
对于指定的正整数n,搜索有多少个不同的n位逐位整除数,并找出最大值。
1.9 神秘的六六大顺数
由6个不同的数字组成的一个6位整数m,m的2倍也是由这6个数字组成;m的3倍也是由这6个数字组成;以至m的4,5,6倍也是由这6个数字组成;这个数字称为神奇的“六六大顺数”。
【编程题】
试搜索w(1<w<10)位整数m,它由不同的w个数字组成,同时整数m的k(2≤k≤6)倍整数都是m的变序数(即m的组成数字通过不同排列所得整数),输入位数w,搜索所有满足以上倍数特征的整数m。
【读者体会】
这一章介绍了一些神奇的整数。
如果需要编程找到这些神奇的整数。
编程设计要点。枚举法
1)枚举。计算并确定数据取值范围,然后循环依次处理(可以利用数的一些特征,减小搜索区间,减少运行时间)
2)分离。依据定义,分离数据中的每个数字(求余和整除)
3)判别。依据定义判定。(可以用数组记录中间结果,减小重复计算)