描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302511335
(2)注重趣味性与吸引力精选趣味数学问题。
(3)注重编程算法思路引导与技巧综合运用。
(4)展示程序的运行结果突显趣与美的拓展。
对精选与提出的趣题在开拓计算思维基础上精巧求解,通过程序设计在广度与深度上拓展,并展示程序运行结果,全方位提升原有问题趣与美的品位,促进趣味数学的深入发展。经典与新颖独创并存,巧妙探求与拓展编程同在。所有程序都给出完整C程序代码及其运行示例,且均在VC 6.0环境下编译通过。
本书适合大学、中学在校学生阅读,也可供程序设计基础不同的广大数学爱好者学习参考。
第1章神奇整数探求1
1.1水仙花与兰德尔数1
1.1.1水仙花数1
1.1.2兰德尔数2
1.2倍和数与倍积数4
1.2.1优美倍和数4
1.2.2优美倍积数7
1.3平方数汇趣9
1.3.1“1和2”的平方数9
1.3.2数字同奇偶平方数11
1.3.3优美平方数13
1.4勾股数与长方体数15
1.4.1勾股数15
1.4.2长方体数19
1.4.36个正整数问题20
1.5完全数与p完全数22
1.5.1完全数22
1.5.2p完全数24
1.6卡普雷卡数25
1.7雅趣守形数27
1.7.1探索区间守形数27
1.7.2展现多位守形数29
1.8逐位整除数31
1.9神秘的六六大顺数35
1.9.1推理揭开神秘面纱35
1.9.2奇妙的“插9”特性36
第2章素数世家风采40
2.1素数搜索40
2.1.1试商判别法41
2.1.2厄拉多塞筛法422.2梅森尼数与费马数44
2.3有趣的对称素数46
2.4素数变形金刚48
2.4.1金蝉素数48
2.4.2超级素数49
2.5素数对51
2.5.1孪生素数对51
2.5.2逆序素数对53
2.6素数表达式55
2.6.1哥德巴赫猜想55
2.6.2欧拉与勒让德表达式57
2.6.3创建素数表达式59
2.7素数等差数列61
2.8素集“乌兰现象”62
2.8.1方螺线中的素集线62
2.8.2回旋层叠另版乌兰65
2.9连续合数集67
2.9.1最小连续合数集68
2.9.2一枝花与清一色世纪69
第3章数式精彩纷呈72
3.1素因数分解式72
3.2埃及分数式75
3.3桥本分数式77
3.4优美和式与平方式80
3.4.19数字优美和式80
3.4.210数字优美和式82
3.4.3优美平方式85
3.5优美综合运算式86
3.5.1隐序四则运算式86
3.5.2综合运算式88
3.6变序数和式91
3.7逆序与变序倍积式94
3.7.1逆序倍积式94
3.7.2变序倍积式96
3.8对称运算式98
3.8.1对称乘积式98
3.8.2对称四则运算式101
3.8.3对称综合运算式103
3.9分段和幂式106
3.9.1卡普雷卡平方式106
3.9.2拓展分段和幂式107
第4章方程经典汇趣112
4.1韩信点兵112
4.2古代趣算114
4.2.1百鸡问题115
4.2.2羊犬鸡兔问题117
4.3国外趣算118
4.3.1牛顿“牛吃草问题”118
4.3.2100!结尾多少个0121
4.4加减得1游戏123
4.5多元不定方程组126
4.5.1双和不定方程组126
4.5.2和积不定方程组128
4.6解不等式130
4.6.1调和数列不等式131
4.6.2代数和不等式133
4.7和与积的整数部分134
4.7.1平方根的两个和135
4.7.2分数连乘积138
4.8猴子分桃与水手分椰子140
4.8.1猴子分桃140
4.8.2水手分椰子142
4.9解佩尔方程145
4.9.1枚举试探求解146
4.9.2应用连分数高精求解148
第5章精巧求解剖析153
5.1和与积巧算153
5.1.1互积和153
5.1.2嵌套根式和155
5.2同码数汇趣157
5.2.1同码数整除157
5.2.2同码数求和158
5.3统计的智慧161
5.3.1巧妙建模161
5.3.2三角网格统计163
5.3.3交通方格网166
5.4游戏中的素数概率168
5.4.1从摇骰子到抽数牌168
5.4.2抽扑克牌171
5.5梅齐里亚克砝码问题174
5.5.1单砝码盘称重174
5.5.2双砝码盘称重178
5.601串积与多码串积182
5.6.1探求01串积182
5.6.2指定多码串积184
5.7精妙的尾数前移187
5.8伯努利装错信封问题189
5.8.1实现排列组合189
5.8.2全错位排列191
5.9两个“幽灵”e和π194
5.9.1自然对数的底e194
5.9.2圆周率π197
第6章多彩数列欣赏200
6.1相亲数对与相亲数环200
6.1.1多位相亲数对200
6.1.2多节相亲数环202
6.2斐波那契序列204
6.2.1探求F/L序列204
6.2.2条件素数序列205
6.3递推趣谈207
6.3.1精彩双飞燕207
6.3.2等幂和多元组208
6.4指积序列213
6.4.1双指积序列213
6.4.2多指积序列216
6.5优美数序列218
6.5.1特定优美数序列218
6.5.2指定位优美数序列220
6.62部数序列222
6.6.1双码2部数序列222
6.6.2探求2部数积226
6.7连写数序列229
6.8德布鲁金环231
6.8.1探求34阶环231
6.8.2构建n阶环233
6.9高超挑剔数列235
第7章最优探索展示241
7.1插符号之最241
7.1.1最大r乘积241
7.1.2最小r加综合和245
7.2最值探求247
7.2.1整数分解中积的最值247
7.2.2条件最值探求251
7.2.3无理函数的最值253
7.3几何优化设计255
7.3.1构建最大容器255
7.3.2优化供水网设计258
7.4智能几何261
7.4.1智能甲虫安全点261
7.4.2创新“铁人三项”263
7.5杜登尼省刻度尺265
7.5.1构建省刻度尺265
7.5.2省刻度尺线性模型269
7.6序列与环的最大子段272
7.7矩阵子形之最276
7.7.1探求最小子阵276
7.7.2探索最大子圈278
7.8迷宫最短通道280
7.9泊松分酒282
第8章数形结合出彩287
8.1三角形填数287
8.1.1等边平方和287
8.1.2等边和积三角形290
8.2爱因斯坦填数题294
8.3五角星填数296
8.3.1形等和296
8.3.2线等和299
8.4数形结合巧求最值302
8.5数码金字塔304
8.5.1圈码金字塔305
8.5.2套含空心圈码塔306
8.6数码菱形309
8.6.1圈码菱阵309
8.6.2数码中空菱形310
8.7折对称方阵312
8.7.1横竖折对称312
8.7.2斜折对称313
8.8圈码与旋转方阵315
8.8.1圈码方阵315
8.8.2双转向旋转方阵317
8.9数码趣环319
8.9.1素数和环319
8.9.2数码串珠环323
第9章智能游戏探秘327
9.13x 1猜想327
9.2黑洞数探索329
9.3平方数等距趣谈333
9.3.1等距整数平方数333
9.3.2欧拉做过的题335
9.4单数码方幂数337
9.4.1单数码平方数337
9.4.2单数码立方数339
9.5汉诺塔游戏340
9.6报数淘汰游戏343
9.6.1约瑟夫报数出圈344
9.6.2横排左右报数出列345
9.7硬币翻转游戏347
9.7.1硬币行正反倒面347
9.7.2硬币矩阵整行列翻转349
9.8取石子游戏354
9.8.1巴什游戏354
9.8.2威索夫游戏356
9.9移动8数码游戏359
第10章数阵天地大观368
10.1中外著名三角数阵368
10.1.1杨辉三角368
10.1.2莱布尼茨三角371
10.2棋盘上的智慧374
10.2.1舍罕王失算375
10.2.2高斯皇后问题376
10.2.3皇后全控棋盘378
10.3马步路径与哈密顿圈381
10.3.1最长马步路径381
10.3.2马步型哈密顿圈386
10.4洛书与幻方390
10.4.1千古洛书390
10.4.2构建n阶幻方392
10.5对角正交拉丁方395
10.6素数幻方399
10.6.13阶素数幻方400
10.6.24阶素数幻方404
10.7积幻方407
10.7.134阶积幻方407
10.7.2一类奇数阶积幻方408
10.8反幻方409
10.8.13阶反幻方410
10.8.2n阶反幻方412
10.9偶遇天然准幻方414
参考文献417
数学是映射科技进步的宏伟殿堂,趣味数学则是其中一座充满趣与美的雅室。
计算机是现代科技发展的里程碑,程序设计则是一把开启成功之门的金钥匙。
2002年在北京的国际数学家大会(ICM2002)期间,91岁高龄的数学大师陈省身先生为少年儿童题词,写下了“数学好玩”4个大字。英国数学家罗素说过: “数学,不但拥有真理,而且也具有至高的美,是一种冷而严肃的美。”
当你走进趣味数学这座雅室,你就会在亲身体验“数学好玩”的同时,领悟数学的“趣”,感受数学的“美”: 逻辑美与形式美、自然美与变幻美、对称美与非对称美、和谐美与奇异美,美不胜收!让你在趣的感悟与美的陶醉之下,萌发溶入数学趣的梦想,涌动发掘数学美的冲动。
趣味数学好玩,程序设计有趣,这两个深受当代青少年朋友喜爱和追捧的热点的交汇融合,是信息时代的必然,是学科相辅相成的典范,更是读者期盼的水到渠成。
处于信息社会的今天,趣味数学须与时俱进,适应时代潮流不断向纵深发展,不断充实新的养料、注入新鲜血液,原地踏步就会丧失生机与活力。计算机的广泛普及与程序设计的全面推广,为趣味数学带来拓展与勃发的春天。同时,趣味数学也为程序设计应用提供了广阔而生动的舞台。
爱因斯坦曾经说过: “兴趣是最好的老师,它可激发人的创造热情、好奇心和求知欲。”趣味数学蕴含“趣”与“美”,编程拓展突出“广”与“深”,把原有趣味数学问题的趣与美拓展到更广阔的境界与更深入的层次,以培养与提升我们的创新意识与开拓能力。
程序设计作为开发利器,对数学猜想实施编程验证无可厚非。但仅仅停留在验证阶段却远远不够,有必要发挥这一利器的潜能,开发与光大趣味数学的趣与美,并试图探测与发掘新的数学瑰宝。
事实上,很多著名数学经典都是由一些简单案例经引申、拓展与提炼而成的。可以说,任何复杂系统都可以追溯到一个简单的原型,而许多浅显问题都可以拓展并融入更为广阔深奥的境界。
书中构造形趣的卡普雷卡数3025=(30 25)2引人注目,通过编程从广度上拓展至多位,从深度上拓展至“多段”和与“多次幂”(下式就是15位6段5次幂式): 346531411903049=(346 53 141 190 30 49)5
如果说人工推出的4对数字的挑剔数列2 3 4 2 1 3 1 4并不显山露水,那么请欣赏n=12时的挑剔数列:
1 2 1 3 2 11 9 3 10 4 12 8 5 7 4 6 9 11 5 10 8 7 6 12
数列中每一对k(1~12)数中间相隔k个数,其优美而奇特的精妙配置深深打动我们,彰显出数学序列的形式美与奇异美。
人工打造的对称乘积式36×84=48×63体现出朴素的对称美,如果因其数字较少且运算过于单调而不够隆重与精彩,那么请看:
4^5-81×72÷3 906=609 3÷27×18-5^4
数式等号两边对称分布10个数字,对称嵌入含乘方(^)的5则运算,等式左右两边从数字到运算符完全对称,精妙绝伦!
以上寥寥数例,充分说明在趣味数学与时俱进向纵深发展的进程中,程序设计拓展不可或缺。
本书精选并提出的趣味数学问题,包括神奇整数探求、精巧数式发掘、多彩数列汇集、几何优化展示、数形结合欣赏、新颖数阵构建、智力游戏揭秘等,著名经典与新颖独创并存,巧妙探求与拓展编程同在,题型广泛,趣美并茂,雅俗共赏,深入浅出。为方便阅读,把相关或相近的内容整合为一章,每章围绕一个中心主题展开,各节具有相对独立性。全书共10章,现把各章的内容简介如下。
第1章为神奇整数探求。数学是从整数起步的,该章将与诸位一道领略数学殿堂上神奇整数的风韵: 有与本身构成数字息息相关的水仙花数、兰德尔数、优美倍和数与倍积数、数字同奇偶的平方数与优美平方数等;也有数学家们长期研究过的勾股数、长方体数、六个正整数问题、完全数与p完全数;更有构形独特的卡普雷卡数、雅趣守形数与精妙的逐位整除数等,琳琅满目,蔚为壮观;最后压轴的“六六大顺数”,经逻辑推理层层揭开它的神秘面纱,进而发掘其奇妙的“插9”特性,无疑是神奇整数中的闪光点。
第2章为素数世家风采。素数是整数中探讨难度较大、研究内容最多的一类奇特整数,推介试商判别法与厄拉多塞筛法是搜索素数的基础。素数世家中有颇具结构美的对称素数、素数变形金刚、逆序素数对、素数等差数列等亮丽“新秀”,更有数学家们提出并研究过的梅森尼数、费马数、孪生素数对、欧拉与勒让德素数多项式、哥德巴赫猜想等显赫“大腕”。展现素集线的“乌兰现象”描绘了素数集聚的神秘色彩,两个有趣的连续合数集增添了素数分布的奇特风韵。素数世家,无愧于“上帝用来描写宇宙的文字”之美誉。
第3章为数式精彩纷呈。该章在整数素因数分解式的基础上,探索涉及分数的埃及分数式与桥本分数式,探讨涉及整数的优美和式、平方式、变序数和式与变序数倍积式等。在探求隐序四则运算式与优美综合运算式中,展现数字与运算符的美妙结合。重点发掘从乘积运算、四则运算到综合运算的系列对称运算式,让我们观察、欣赏、赞叹、领悟数学式的对称美、和谐美与奇异美!最后压轴的分段和幂式,则是对卡普雷卡数广度的开拓与深层的发掘。数式精彩!精彩纷呈!
第4章为方程经典汇趣。该章汇集韩信点兵、百鸡问题及羊犬鸡兔问题等古典趣算,并探讨牛顿“牛吃草问题”、n!结尾多少个零等外国有趣经典。集中探求具有特色的不定方程、不等式等一般数学推理较难处理的难点,其中,和与积的整数部分展示了数学探索与编程拓展的有机融合。通过猴子分桃与水手分椰子的妙思巧解,首次把这两个著名趣题联系起来,并统一编程拓展。最后的亮点无疑是应用连分数高精度求解佩尔方程,摆平自然界对人类智商的刁难与挑战。
第5章为精巧求解剖析。精巧求解,包括高精度计算,是最具吸引力的热点,也是让人望而却步的难点。从互积和与嵌套根式和的巧算、同码数的整除与求和规律探索,到建模统计与分类统计、游戏中的素数概率计算等,突出一个“巧”字。深入探求最小01串积、指定多码串积与尾数前移问题,突显一个“精”字。拓展梅齐里亚克的砝码问题与错位排列的伯努利装错信封问题,精巧并存,耐人寻味。飘逸于数学殿堂的两个“幽灵”e和,凝聚数学的精华,彰显编程的卓越。
第6章为多彩数列欣赏。数列、序列(包括数环)是趣味数学的精彩环节。该章汇聚相亲数对与相亲数环、斐波那契序列与卢卡斯序列、德布鲁金环序列等有影响的著名序列;新推构思独创的精彩双飞燕、优美数序列、等幂和n元组、指积序列、双码二部数序列与连写数序列等,妙趣横生。拓展有着ACM背景的“2部数积”为枚举难点的突破留下思索的空间。最后压轴的“挑剔数列”的设计与展现无疑是数列的亮点,其高超的结构美与独特的奇异美让人赞叹不已!
第7章为最优探索展示。最优设计与最值探求往往是实际应用案例的目标,是最具挑战思维与创新精神的课题。该章汇聚有插入运算符的最值、整数分解中的最值、条件最值与无理函数最值等最值探求典型案例;有探求迷宫最短通道、展现序列子段与数阵子形之最的最优操作;有智能甲虫安全点、构建最大容器、优化供水网与创新“铁人三项”等几何最优设计;重点拓展泊松分酒和杜登尼省刻度尺等形象生动的优化典范。最优探索,有数值的,也有几何的;有国际经典,也有新颖独创,颇具启发性与示范性。
第8章为数形结合出彩。数在形中,数构成形,数形结合,可使图增色,形添彩。该章汇集在三角形、五角星等几何图形上填数、爱因斯坦做过的填数趣题及构建等边和积三角形等优美图案;平凡数字经精巧构思排列呈现出各种生动的数码金字塔、空心菱形、横竖折对称、斜折对称方阵与旋转方阵等,最生动、最优雅地展现数形结合之美。通过“数形结合巧求最值”展现数形结合在简化最值求解上的应用,探求素数和环与数码串珠环等具有理论意义与应用价值的实际案例,令人回味无穷。
第9章为智能游戏探秘。猜想探索与游戏揭秘是最具吸引力的热点,也是检测与提高探索能力的考点。该章汇聚3x 1猜想、3位与4位黑洞数探索、等距平方数及欧拉做过的题、单数码方幂等数字趣题;同时在约瑟夫出圈基础上推出新颖的横排左右报数出列,在硬币行倒面基础上推出有智能、有深度的硬币矩阵翻转等;探讨汉诺塔游戏、巴什游戏、威索夫游戏与移动8数码游戏等有难度的游戏宝典。通过这些具有开创性与智能性的猜想与游戏案例,激励我们开拓计算思维,提升创新意识。
第10章为数阵天地大观。数阵包括矩阵、方阵以及三角阵等,形式广泛,内容翻新。该章探讨杨辉三角与莱布尼茨三角这两个中外著名的三角数阵,并建立二者之间的内在联系。探索影响深远的高斯皇后问题、皇后全控棋盘、最长马步路径、马步遍历与马步型哈密顿圈,再现棋盘上的风云故事及其恢宏演绎。幻方是古今中外雅俗共赏的数学奇葩,从千古洛书开始,探讨n阶幻方、积幻方以及素数幻方的巧妙构建,并首次把“对角正交拉丁方”纳入幻方范畴,突显幻方的博大精深。
本书突出以下特色。
(1) 开创探索趣味数学与程序设计交汇融合。
开创趣味数学与程序设计的交汇融合,探索传统文明与现代科技的紧密结合。应用程序设计把趣味数学问题在广度与深度上拓展,全方位提升原有问题趣与美的品位,促进趣味数学的深入发展,焕发趣味数学的炫丽青春。
(2) 注重趣味性与吸引力,精选趣味数学问题。
精选并提出趣味数学问题注重趣味性与吸引力,立足整数基础,广泛涉及数对、数式、数列、数阵、数形与数游,既有引导入门的基础题,也有复杂高超的综合题;既有名扬中外的著名经典,也有构思精巧的新颖独创,雅俗共赏,深入浅出。
(3) 注重编程算法引导与设计技巧综合运用。
拓展程序采用功能丰富、应用面广的C语言编程设计。考虑到读者程序设计基础不一,算法以基本枚举与递推为主,注重编程算法思路引导,注重分解、整合、转换、求精等技巧的综合运用。程序给出完整代码并详细注释,有利于程序的阅读、修改、变通与调试。
(4) 展示程序的运行结果,突显趣与美的拓展。
每一趣味数学问题在思路开拓与精巧求解之后,从广度与深度上展开拓展编程。展示程序运行结果,突显数学问题趣与美的拓展,使读者通过欣赏与比较,加深对拓展的理解,有利于激励开拓计算思维、开启益智训练、开展数学娱乐的兴趣。
本书得到孙明保教授、刘永年教授、周持中教授、严权锋教授的大力支持,并得到湖南理工学院同行及清华大学出版社编辑们的热情帮助,在此一并表示感谢!
本书适合大学、中学在校学生阅读,也可供程序设计基础不同的广大数学爱好者与奥数竞赛参与者学习参考。开卷有益,我相信您总能从书中找到自己的兴趣点而有所收益,总能从自己兴趣点的引申与拓展中得到启迪。
趣味数学与程序设计的融合是一个系统工程,本书仅仅为这一工程的起步探索抛砖引玉。因所涉范围太广,书中疏漏之处在所难免,恳请读者批评指正。
杨克昌2018年10月于岳阳南湖
精巧求解,包括高精度计算,是最具吸引力的亮点,也是让人望而却步的难点。
本章从互积和与嵌套根式和的巧算、同码数的整除及同码数求和规律的探索,到建模统计、分类统计、游戏中的素数概率求解,突出一个“巧”字。同时,从探索最小01串积、指定多码串积与尾数前移问题等,突显一个“精”字。
探讨并拓展著名的梅齐里亚克砝码问题与伯努利装错信封的排列问题,是“巧”与“精”结合的典范。飘逸于数学殿堂的两个“幽灵”e和π,凝聚着数学的精华,彰显出编程的卓越。5.1和与积巧算
本节探讨简单的互积和与根式和,不存在难点,但求解技巧颇具启发性。
5.1.1互积和
探求已知整数组的互积和是涉及和与积的常规题,有较强的技巧性,常常作为数学奥赛的培训题或测试题。
有9个整数: -3,-2,-1,0,1,2,4,8,16,对这9个整数求任意2个数之积,任意3个数之积,……,直至所有9个数之积。把所有这些积之和称为这些整数的互积和。
【问题】试求这9个整数的互积和m。
【分类求解】把互积和分类是简化求解的关键。
可忽略0,因凡含有0的积结果均为0,对最后结果没有影响。
注意到所有正数和为31,分以下5类情形考虑。
(1) 所有正数互积和,设为s1(不含单个正数)。
(2) 所有负数互积和: s2=2 3 6-6=5。
(3) 含1个负数的互积和: s3=(-1-2-3)×(s1 31)=-6s1-6×31。
(4) 含2个负数的互积和: s4=11×(s1 31)=11s1 11×31。
(5) 含3个负数的互积和: s5=-6×(s1 31)=-6s1-6×31。
以上5项求和,巧妙消去其中尚未算出的s1,得到互积和m。m=s1 s2 s3 s4 s5=5-31=-26 【妙思巧解】巧妙构造多项式化互积为多项式积。
记8个非零整数为a1,a2,…,a8,构造多项式f(x)=(x a1)(x a2)…(x a8)=x8 p1x7 p2x6 … p7x p8(1)其中,p1为8个数之和25;p2为任意2个数积之和;p3为任意3个数积之和;……;p8为所有8个数之积。显然,所求互积和m=p2 … p8
令x=1,由式(1)左边知f(1)=0(因有一整数为-1);同时,由式(1)右边有f(1)=1 p1 p2 … p8=1 25 m,因而所求结果为m=p2 … p8=-26。
给出的整数中有-1,即得和f(1)=0,这是减少计算量的关键所在。
即使给出的8个整数中没有-1,计算式(1)左边的8个数之积也远比计算“互积”来得简单。
【概括】以上两个求解都颇具启发性。如果按“互积”的定义,具体实施每2个数求积,每3个数求积,……,这一思路并不可行。而分类的思想和建多项式的思想,就是化解“互积”这一难点的巧妙突破点。
如果对于指定的一般n个整数,如何求取其互积和?
【编程拓展】 拓展至一般情形,探求n个整数的互积和。
对给出的n个整数,计算任意2个数之积,任意3个数之积,……,直到所有n个数之积。定义所有这些积之和为这n个整数的互积和m。
从键盘输入n个整数,探求并输出这n个整数的互积和m。
(1) 设计要点。
按上述巧妙构造多项式,化“互积”为多项式积。
设置存储n个整数的a数组,从键盘输入的n个整数存储在a[1],a[2],…,a[n]。
同时构造关于这n个整数的n次多项式y(x)=(x a1)(x a2)…(x an)=xn p1xn-1 p2xn-2 … pn-1x pn(2)其中,p1为n数之和;p2为任意2个数积之和;……;pn-1为任意n-1个数积之和;pn为所有 n个数之积。显然,m=p2 … pn。
令x=1,按式(2)左边通过循环求积,可简单得出y(1);按式(2)右边有y(1)=1 p1 p2 … pn-1 pn;同时在循环中求出n个整数之和p1,显然所求互积和m为m=y(1)-p1-1(3)循环结束,即按式(3)输出所求n个整数的互积和m。
(2) 程序设计。//求n个整数的互积和m
#include
void main()
{longk,m,n,s,y,a[100];
printf(“请确定整数的个数n:”);scanf(“%ld”,&n);
s=0;y=1;
for(k=1;k<=n;k )//逐个输入n个整数
{printf(“请输入第%ld个整数:”,k);
scanf(“%ld”,&a[k]);
s =a[k]; y=(1 a[k]); //计算整数和s及f(1)
}
m=y-1-s;//计算互积和m
printf(“输入的%ld个整数为:%ld”,n,a[1]);
for(k=2;k<=n;k )//集中输出n个整数
printf(“, %ld”,a[k]);
printf(“\n以上%ld个整数的互积和m=%ld。 \n”,n,m);//输出结果
}(3) 程序运行示例与说明。请确定整数的个数n:8
输入的8个整数为:-5, -3, -2, 3, 5, 8, 10, 13
以上8个整数的互积和m=-266142。
运行程序时,输入n个整数的先后顺序对互积和结果没有影响。
以上程序把求互积(若干积)转化为求一个积,是简化复杂运算的技巧所在。
同时,程序设置在输入循环中输入与计算(和与积)同步进行,输入循环结束,计算也随之完成。
如果运行程序,输入9个整数-3,-2,-1,0,1,2,4,8,16,即可得到互积和为-26,其中的整数-1是一个简化因子。
即使没有-1这一简化整数,以上程序实现把“互积”难点转化为在循环中求一个积,也非常精巧。
5.1.2嵌套根式和
试求以下两个嵌套根式和s1=1 2 3 … n(4)
s2=5 3 5 3 … 5 3(式中有n个5与n个3)(5)输入正整数n,输出根式和s1与s2(精确到小数点后8位)。
1. 设计要点
对于给定的正整数n,在s1中涉及n层开方,而s2涉及2n层开方,新颖少见。
根式和(4)与(5)存在根号嵌套,处理根号嵌套这一难点是设计的关键。
按通常由起点1到终点n设置循环,不便于处理根号嵌套这一难点。但若反过来逆向设置循环,解决根号嵌套就顺理成章。
(1) 实现s1求和。
设置a(n-1~1)循环枚举整数a,循环外赋初值s1=n; 循环内求累加和。s1=a sqrt(s1);赋值表达式中的sqrt(s1),即可实现s1的根号嵌套。
当a=n-1时,s1=(n-1) sqrt(n); 实现最内1层根号。
当a=n-2时,s1=(n-2) sqrt((n-1) sqrt(n)); 实现最内2层根号。
……
当a=1时,s1实现式(4)除最外层之外的其他所有n-1层根号。
最后一层根号在输出结果时完成。
(2) 实现s2求和。
同样设置a(n-1~1)循环,循环外赋初值s2=5 sqrt(3); 循环n-1次。s2=5 sqrt(3 sqrt(s2));赋值表达式中的sqrt(s2)即可实现s2的根号嵌套。
当a=n-1时,s2=5 sqrt(3 sqrt(5 sqrt(3))); 实现最内3层根号。
当a=n-2时,s2=5 sqrt(3 sqrt(5 sqrt(3 sqrt(5 sqrt(3))))); 实现最内5层根号。
……
当a=1时,s2实现式(5)除最外层之外的其他所有2n-1层根号。
最后一层根号在输出结果时完成。
2. 程序设计//探求两个根式和
#include
#include
void main()
{double a,n,s1,s2;
printf(“请输入正整数n(n>1): “); scanf(“%lf”,&n);
s1=n;s2=5 sqrt(3);
for(a=n-1;a>=1;a–)//枚举n-1至1的整数a
{s1=a sqrt(s1);
s2=5 sqrt(3 sqrt(s2));
}
printf(“s1=%.8f\n”,sqrt(s1));//最后的和s1与s2需开平方
printf(“s2=%.8f\n”,sqrt(s2));
}3. 程序运行示例与变通请输入正整数n(n>1): 100
s1=1.75793276
s2=2.71870969
在所设置的a循环中,应用s1=a sqrt(s1);及s2=5 sqrt(3 sqrt(s2));是实现根号嵌套的技巧所在。
变通: 容易修改以上程序,探求区间[c,d]中的根式和s1=c (c 1) (c 2) … d(6)
s2=c (c 1) c (c 2) … c d(7)输入区间上下限正整数c,d(c5.2同码数汇趣
由同一个数码组成的数称为同码数。
例如,555,0.7777都是同码数,前者是同码整数,而后者则是同码小数。
如果说优美数要求数字不重复体现和谐美,那么同码数强调数码相同则是奇异美的象征。本节探讨同码数整除问题,探求同码整数与同码小数之和。从同码整数之和与同码小数之和可发现一些有趣的规律与特点。
5.2.1同码数整除
先看一个简单的同码数整除问题。
【命题】存在正整数n≤2019,使得n个1组成的同码整数m能被2019整除。
【证明】根据余数的抽屉原理来证。
分别由n=1~2019个由1组成的同码整数除以2019,其余数r不外乎0,1,…,2018。
如果存在某一n值,n个1组成的同码数除以2019,余数r=0,则命题成立。
假设分别由n=1~2019个由1组成的同码数除以2019,余数中不存在0,这2019个余数r不外乎1,…,2018。根据抽屉原理,2019个余数中必存在至少两个余数是相同的。
不妨设1≤n1因而证得存在正整数n≤2019,使得n个1组成的同码数m能被2019整除。
【问题】至少需要多少个1组成的同码整数m能被2019整除。
【求解】试实施竖式除法实验探求。
探求由1组成的同码整数,至少需要多少个1才能被2019整除,可实施竖式除法,如图51所示。图51实施竖式除法示意图
只要有一定的耐心与时间,总可以把竖式除法做下去,找到最小的整数n,使得n个1组成的同码数m能被2019整除。
可以肯定地告诉你,除法不可能无限制地进行下去,因为有n≤2019。至于n至少为多大,则必须要等以上图示的试商结果出炉。
【编程探求】探求同码数能被p整除。
给定正整数p(约定整数p为个位数字不是5的奇数),探求最小的正整数n,使得n个1组成的同码数能被p整除。
为什么要约定整数p为个位数字不是5的奇数呢?因为偶数的积只能是偶数,个位数字为5的奇数的乘积个位数字只能是0或5,都不可能为1。
(1) 竖式除法模拟设计要点。
设整数竖式除法每次试商的被除数为a,除数为p(即给定正整数),每次试商余数为c。
以余数c≠0作为条件设置条件循环,循环外赋初值: c=1,n=1;或c=11,n=2等。
被除数a=c10 1,试商余数c=a%p。每商一位,设置统计1个数的变量n增加1。
若余数c=0,结束循环,输出结果。
否则,继续下一轮试商,直到c=0为止。
(2) 程序设计。//探求整数至少多少个1能被指定整数p 整除
#include
void main()
{int a,c,p,n;
printf(“请输入整数p: “); scanf(“%d”,&p);
if(p%2==0 || p%10==5)
{ printf(“不存在同码数整除%d。”,p); return; }
n=1; c=1;//确定初始值n,c
while(c!=0)
{ a=c10 1; c=a%p; n ;}//实施除乘竖式计算模拟
printf(“至少需%d个1的整数才能被%d整除。\n”,n,p);
}(3) 程序运行示例与说明。请输入整数p: 2019
至少需672个1的整数才能被2019整除。
输出结果是至少需672个1才能被2019整除,靠人工实施竖式除法,想得出这一结果还是比较繁复的。
这还不算,试试“至少需多少个1才能被2017整除”,就更能切身体会到人工计算与程序计算的效益差别。
5.2.2同码数求和
本节探索n个同码数求和,包括同码整数求和与同码小数求和。设和式s(d,n)=d dd ddd … dd…d(n个d)(2)
f(d,n)=0.d 0.dd 0.ddd … 0.dd…d(小数点后n个d)(3)式(2)为n个同数码d整数之和,和式中第k项有k位数字d(d=1,2,…,9)。
例如,s(3,5)=3 33 333 3333 33333。
式(3)为n项同数码d小数之和,其中第k项小数点后有连续k个数字d(d=1,2,…,9)。
例如,f(7,4)=0.7 0.77 0.777 0.7777。
【问题1】试求同码整数和s(3,30)。
【求解】引入中间量s(9,30)用以简化求和。
引入中间量s(9,30)是有趣的,因为s(9,30)与s(3,30)直接相关,而s(9,30)可以直接算出。事实上,由s(3,30)=s(9,30)/9×3=s(9,30)/3(4)而s(9,30)=9 99 … 99…9
=(10-1) (100-1) … (1030-1)
=11…10-30=11…1080 (最后数中28个1)
s(3,30)=11…1080/3(被除数中28个1)
注意到1111/3=370,余数1;1080/3=360,因而得S(3,30)=370…3709个370360(5)有趣的是,以上s(3,30)的结果(5)中出现9个370重复节,耐人寻味。
【问题2】试求同码小数和f(6,30)。
【求解】引入中间量f(9,30)用以简化求和。
同样引入中间量f(9,30),因为f(9,30)与f(6,30)直接相关,而且f(9,30)可以直接算出。由f(6,30)=s(9,30)/9×6=s(9,30)×2/3(6)而f(9,30)=0.9 0.99 … 0.99…9=30-0.11…1(后项小数共连续30个1)则f(6,30)=(30-0.111…)×2/3=(60-0.222…)/3因而f(6,30)=59.77…78/3=19 2.77…78/3 (其中后项小数有连续29个7)注意到2777/3=925,余数为2;而2778/3=926,因而得f(6,30)=19.925…9259个925926(7)同样耐人寻味的是,f(6,30)的结果(7)中出现9个重复节925。
【编程拓展】探求同码整数和s(d,n)与同码小数和f(d,n)。
输入整数d(1≤d≤9),及整数n(11. 设计要点
设置s数组存储和s(d,n),s[1]存储个位数字,s[2]存储十位数字,以此类推。
设置f数组存储和f(d,n),f[0]存储小数和的整数部分,f[1]存储小数点后第1位,f[2] 存储小数点后第2位,……,f[n]存储小数点后第n位。
(1) 整数求和。
整数和式中共有n位数求和,第i个数有i位(i=1,2,…,n),每一位数字为d。
设置i(1~n)循环,循环n次,实施n个数相加: i=1时,个位有n个d相加,其值为n×d;i=2时,十位有n-1个d相加,其值为(n-1)×d;一般第i位,有n-i 1个d相加,其值为(n-i 1)×d。
完成相加后,还需从个位开始,逐位实施进位:s[j 1]=s[j 1] s[j]/10;s[j]=s[j]%10; (j=1~n-1)整数输出当然是从高位开始,逐位向低位输出。
(2) 小数求和。
同样设置i(1~n)循环,循环n次,实施n个数相加: i=1时,小数点后第1位有n个d相加,其值为n×d;i=2时,小数点后第2位有n-1个d相加,其值为(n-1)×d;一般小数点后第i位,有n-i 1个d相加,其值为(n-i 1)×d。
以上相加就在一个循环中实现。完成n个相加后,还需从小数点后第n位开始,逐位实施进位。f[j-1]=f[j-1] f[j]/10;f[j]=f[j]%10; (j=n~1)最后得到的f[0]即为小数和的整数部分,其值可能为1位,也可能为多位。
小数和输出,最先输出整数部分f[0]加带小数点,然后从小数点第1位开始,逐位输出到小数点后第n位。
2. 同码数求和程序设计//求整数和s(d,n)=d dd ddd … dd…d(n个d)
//求小数和f(d,n)=0.d 0.dd 0.ddd … 0.dd…d(n个d)
#include
void main()
{int d,i,j,n,s[5000],f[5000];
printf(” 请输入整数d,n: “);scanf(“%d,%d”,&d,&n);
for(j=0;j<=n;j ) s[j]=f[j]=0;
for(i=1;i<=n;i )
s[i]=f[i]=(n-i 1)d;//第i位共n 1-i个d之和
for(j=1;j<=n-1;j )//加完n个整数数后统一进位
{ s[j 1]=s[j 1] s[j]/10;s[j]=s[j]%10;}
printf(“s(%d,%d)=”,d,n);
for(j=n;j>=1;j–)//从高位开始逐位输出和s(d,n)
printf(“%d”,s[j]);
for(j=n;j>=1;j–)//加完n个小数数后统一进位
{ f[j-1]=f[j-1] f[j]/10;f[j]=f[j]%10;}
printf(“\nf(%d,%d)=%d.”,d,n,f[0]);
for(j=1;j<=n;j )//从小数点后第一位开始逐位输出和
printf(“%d”,f[j]);
printf(” \n”);
}3. 程序运行示例与说明请输入整数d,n: 7,30
s(7,30)=864197530864197530864197530840
f(7,30)=23.246913580246913580246913580247
从上述整数求和结果看,864197530这一“重复节”在和中重复3次,只有最后3位840不属于重复节。
从上述小数求和结果看,小数点后除了尾部3位247之外,其余是246913580这一“重复节”,重复3次。
同码数求和结果中的“重复节”与循环小数的“循环节”有类似之处,不同的是重复节往往在前面,而循环节通常在后面。
5.3统计的智慧
本节探讨巧妙建模、三角网格与交通方格网等3个有代表性的统计案例,其统计思路与方法颇为新颖。
5.3.1巧妙建模
本案例探求一个线性不定方程的解有多少组,应用建模简化了统计过程。
【问题】对于不定方程 x y z=15,试统计:
(1) x,y,z为非负整数解的组数;
(2) x,y,z为正整数解的组数;
(3) x,y,z满足x≥-3,y≥2,z≥5的整数解的组数。
【建模巧解】拟建立投球统计模型,转化为组合计算。
(1) 把问题转化为15个相同的小球投放到3个分别标有x,y,z标签的盒子中的不同的投放种数。然后,把3个盒子“抽象”为并排设置的2块隔板,这2块隔板划分的3个区域相当于3个盒子,即x,y,z变量。于是把15个小球与这2块隔板进行排列,每一种不同的排列对应一种投球结果,即对应不定方程x y z=15的一组解。排列种数等于15 2个位置中挑选出2块隔板位置的组合数C(15 2,2)。因而x,y,z为非负整数解的组数为C(17,2)=136。
(2) 若x,y,z为正整数,相当于每一个盒子至少要投放一个小球,不妨每一盒子先放一小球。然后15-3=12个小球与2块隔板进行排列,共有组数即为组合数C(12 2,2)。因而x,y,z为正整数解的组数为C(14,2)=91。
(3) 若x,y,z满足x≥-3,y≥2,z≥5,令a=x 3,b=y-2,c=z-5,则由x y z=15得a b c=11(a,b,c≥0),由上可知这一方程的非负整数解组数为组合数C(11 2,2)。因而x,y,z满足x≥-3,y≥2,z≥5的整数解的组数为C(13,2)=78。
【编程拓展】
对于给定的正整数和s,对于3个变量x,y,z的不定方程x y z=s,试统计x,y,z取自区间[c,d](0≤c(1) 设计要点。
建立x,y,z循环枚举区间[c,d]上的所有整数,如果满足条件x y z=s即输出方程的解并用n实施统计。
注意到3个变量x,y,z没有大小约定,因而循环区间都是[c,d]。
(2) 程序设计。//不定方程x y z=s求解与统计
#include
#include
void main()
{int c,d,n,s,x,y,z;
printf(“请确定各变量起点c与终点d:”); scanf(“%d,%d”,&c,&d);
printf(“请确定和s(3cn=0;
for(x=c;x<=d;x )//设置3重循环枚举x,y,z
for(y=c;y<=d;y )
for(z=c;z<=d;z )
if(x y z==s)//满足条件时统计并输出解
{n ;
printf(” x=%d,y=%d,z=%d”,x,y,z);
if(n%3==0)printf(“\n”);
}
printf(“\n 共%d组解。\n”,n);
}(3) 程序运行示例与说明。请确定各变量起点c与终点d: 5,9
请确定和s(3c x=5,y=6,z=9 x=5,y=7,z=8 x=5,y=8,z=7
x=5,y=9,z=6 x=6,y=5,z=9 x=6,y=6,z=8
x=6,y=7,z=7 x=6,y=8,z=6 x=6,y=9,z=5
x=7,y=5,z=8 x=7,y=6,z=7 x=7,y=7,z=6
x=7,y=8,z=5 x=8,y=5,z=7 x=8,y=6,z=6
x=8,y=7,z=5 x=9,y=5,z=6 x=9,y=6,z=5
共18组解。
当输入c=0,d=15,s=15,即为上面建模所解x y z=15的136个非负整数解。
当输入c=1,d=15,s=15,即为上面建模所解x y z=15的91个正整数解。
区间[c,d]的起始整数c也可以取负整数。
评论
还没有评论。