作品简介

本书是一本专门为程序员而写的数学书,介绍了程序设计中常用的数学知识。本书门槛不高,不需要读者精通很多高深的数学知识,只需要读者具备基本的四则运算、乘方等数学基础知识和日常生活中的基本逻辑判断能力即可。本书拒绝枯燥乏味的讲解,而是代之以轻松活泼的风格。书中列举了大量读者都很熟悉,而且非常有趣的数学实例,并结合程序设计的思维和算法加以剖析,可以训练读者的数学思维能力和程序设计能力,进而拓宽读者的视野,增强职场竞争力。

本书共11章,分别介绍了数据的表示、神奇的素数、递归、排列组合、用余数进行数据分组、概率、复利、数理逻辑、推理、几何图形构造、统筹规划等程序设计中常用的数学知识,从而引导读者深入理解编程中的数学方法和思路。本书包含的实例有结绳记事、孪生素数、梅森素数、哥德巴赫猜想、阶乘、汉诺塔、斐波那契数列、乘法原理、加法原理、字符编码、密码长度、日历中的数学、心灵感应魔术、约瑟夫环、智叟分牛、百枚钱币鼓士气、庄家的胜率、中奖概率、用概率方法求π值、复利的威力、对折纸张、舍罕王的赏赐、三段论、选言推理、假言推理、关系推理、花盆摆放、残缺棋盘、丢失的线条、田忌赛马、背包问题等。

本书适合广大程序设计人员及数学爱好者阅读,尤其适合有一定程序设计经验,但还需要进一步加深对程序设计理解的人员阅读。本书对IT求职人员、信息学竞赛和大学生程序设计竞赛等参赛学员也有很好的参考价值。

周颖,毕业于电子科技大学。高级程序员、某软件公司的技术总监。擅长C和C++语言,对数据结构和算法有深入的研究。长期从事行业软件设计和团队管理工作,已十年有余。有着丰富的IT架构设计经验和行业咨询经验。负责过多个大型软件项目的开发工作。

作品目录

  • 前言
  • 第1章 数据的表示
  • 1.1 一则童话
  • 1.1.1 0和1的故事
  • 1.1.2 0是什么都没有?
  • 1.1.3 0的位置
  • 1.1.4 程序中的0
  • 1.2 司空见惯的十进制数
  • 1.2.1 远古的结绳记事
  • 1.2.2 什么是十进制计数
  • 1.2.3 为啥人类习惯十进制
  • 1.2.4 十进制运算规则
  • 1.2.5 十进制数的分解
  • 1.2.6 20!等于多少
  • 1.2.7 大整数构想
  • 1.3 为啥要用二进制
  • 1.3.1 人脑与电脑
  • 1.3.2 二进制计数规则
  • 1.3.3 简单的二进制运算规则
  • 1.3.4 二进制数的分解
  • 1.3.5 十进制数转换为二进制数
  • 1.4 还有哪些进制
  • 1.4.1 神奇的八卦:八进制
  • 1.4.2 钟表使用的十二进制
  • 1.4.3 半斤八两:十六进制
  • 1.4.4 60年一个甲子:六十进制
  • 1.4.5 各种进制之间的转换
  • 1.4.6 二进制与八进制、十六进制的转换
  • 第2章 神奇的素数
  • 2.1 怎么判断素数
  • 2.1.1 什么是素数
  • 2.1.2 验证素数
  • 2.1.3 寻找素数的算法
  • 2.1.4 已被证明的素数定理
  • 2.2 孪生素数
  • 2.2.1 什么是孪生素数
  • 2.2.2 孪生素数的公式
  • 2.2.3 中国剩余定理
  • 2.2.4 孪生素数分布情况
  • 2.3 使用素数的RSA算法
  • 2.3.1 什么是RSA
  • 2.3.2 RSA算法基础
  • 2.3.3 RSA算法实践
  • 2.3.4 RSA应用:数字签名
  • 2.3.5 RSA被破解的可能性
  • 2.4 哥德巴赫猜想
  • 2.4.1 哥德巴赫猜想是什么
  • 2.4.2 数值验证
  • 2.5 梅森素数
  • 2.5.1 什么是梅森素数
  • 2.5.2 已知的梅森素数列表
  • 第3章 递归——自己调用自己
  • 3.1 从前有座山,山里有座庙
  • 3.1.1 老和尚讲的故事
  • 3.1.2 德罗斯特效应
  • 3.1.3 什么是递归
  • 3.1.4 用递归能解决哪些问题
  • 3.1.5 一个简单例子:求最大公约数
  • 3.2 用递归计算阶乘
  • 3.2.1 阶乘该怎么计算
  • 3.2.2 阶乘的递归计算方法
  • 3.2.3 递归的过程
  • 3.2.4 递归的本质:缩小问题规模
  • 3.3 汉诺塔
  • 3.3.1 古老的传说
  • 3.3.2 从两个盘考虑
  • 3.3.3 找出递归结构
  • 3.3.4 实现程序
  • 3.3.5 究竟需要移动多少次
  • 3.4 斐波那契数列
  • 3.4.1 兔子的家族
  • 3.4.2 从最初几月数据中找规律
  • 3.4.3 斐波那契数列
  • 3.4.4 神奇的魔八方
  • 第4章 排列组合——让数选边站队
  • 4.1 把所有情况都列出来
  • 4.1.1 从0还是1开始
  • 4.1.2 赛程安排
  • 4.2 乘法原理
  • 4.2.1 行程安排的问题
  • 4.2.2 乘法原理适用条件
  • 4.2.3 棋盘上棋子的放法
  • 4.2.4 买彩票保证中奖的方法
  • 4.3 加法原理
  • 4.3.1 仍然是行程问题
  • 4.3.2 总结出的加法原理
  • 4.3.3 骰子出现偶数的次数
  • 4.4 排列与组合的关系
  • 4.4.1 排列
  • 4.4.2 组合
  • 4.4.3 排列与组合的联系
  • 4.4.4 可重排列
  • 4.5 计算机中的字符编码
  • 4.5.1 ASCII码能表示的字符数量
  • 4.5.2 能表示更大范围的编码
  • 4.6 密码的长度
  • 4.6.1 容易破解的密码
  • 4.6.2 多长的密码才安全
  • 4.6.3 密码中使用的字符数量也很关键
  • 第5章 余数——数据分组
  • 5.1 复习小学的余数
  • 5.1.1 自然数的余数
  • 5.1.2 余数的性质
  • 5.1.3 用余数进行分组
  • 5.2 日历中的数学
  • 5.2.1 n天后是星期几
  • 5.2.2 下月的今天是星期几
  • 5.2.3 10年后的“今天”是星期几
  • 5.3 心灵感应魔术
  • 5.3.1 一个小魔术
  • 5.3.2 魔术师是怎么猜出来的
  • 5.4 奇偶校验
  • 5.4.1 不可靠的网络传输
  • 5.4.2 用奇偶校验检查错误
  • 5.5 吕洞宾不能坐首位
  • 5.5.1 座位安排
  • 5.5.2 试排座位找规律
  • 5.5.3 西方的约瑟夫环
  • 5.5.4 用数学方法解约瑟夫环
  • 5.6 智叟分牛
  • 5.6.1 遗产分配难题
  • 5.6.2 智叟给出的分配方案
  • 5.6.3 分配原理
  • 第6章 概率——你运气好吗
  • 6.1 初中学习过的概率
  • 6.1.1 谁先开球
  • 6.1.2 用程序模拟抛硬币
  • 6.1.3 什么是概率
  • 6.1.5 概率的基本性质
  • 6.2 百枚钱币鼓士气
  • 6.2.1 狄青的计谋
  • 6.2.2 全为正面的概率是多少
  • 6.2.3 必然还是偶然
  • 6.3 庄家的胜率是多少
  • 6.3.1 一个看似公平的游戏
  • 6.3.2 庄家能赢钱吗
  • 6.3.3 庄家盈利比率
  • 6.3.4 游戏参与者获胜的概率
  • 6.4 你能中奖吗
  • 6.4.1 想中大奖吗
  • 6.4.2 计算中奖概率
  • 6.5 渔塘中有多少条鱼
  • 6.5.1 该怎么估算渔塘中的鱼
  • 6.5.2 用概率来估算
  • 6.5.3 用概率方法求π值
  • 第7章 翻一番是多少
  • 7.1 翻番的概念
  • 7.1.1 什么是翻番
  • 7.1.2 翻倍的概念
  • 7.1.3 计算倍数和番数
  • 7.2 复利的威力
  • 7.2.1 利润——投资回报
  • 7.2.2 认识单利
  • 7.2.3 认识复利
  • 7.2.4 计算投资回报的程序
  • 7.2.5 忘还钱的信用卡
  • 7.2.6 爱因斯坦的72法则
  • 7.3 对折纸张
  • 7.3.1 有趣的问题:纸张对折
  • 7.3.2 100米长的纸能对折几次
  • 7.3.3 计算对折次数的程序
  • 7.4 一棋盘的麦子
  • 7.4.1 舍罕王的赏赐
  • 7.4.2 需要多少麦粒
  • 7.5 折半法的运用
  • 7.5.1 翻番的逆运算
  • 7.5.2 找出假硬币
  • 7.5.3 编写程序找出假硬币
  • 7.5.4 折半法在查找中的应用
  • 第8章 数理逻辑——非此即彼
  • 8.1 逻辑的重要性
  • 8.1.1 模棱两可的表述
  • 8.1.2 肯定或否定
  • 8.1.3 程序中的逻辑判断
  • 8.2 命题逻辑
  • 8.2.1 什么是命题
  • 8.2.2 命题的逻辑形式
  • 8.2.3 简单命题
  • 8.2.4 复合命题
  • 8.2.5 复合命题的联结词
  • 8.3 布尔逻辑
  • 8.3.1 逻辑或
  • 8.3.2 逻辑与
  • 8.3.3 逻辑非
  • 8.3.4 逻辑异或
  • 8.3.5 二进制位运算
  • 8.4 考虑到各种可能了吗
  • 8.4.1 逻辑重叠的实例
  • 8.4.2 逻辑遗漏的实例
  • 8.4.3 用数轴确定边界
  • 8.5 用卡诺图简化逻辑函数
  • 8.5.1 什么是卡诺图
  • 8.5.2 三变量卡诺图
  • 8.5.3 四变量卡诺图
  • 8.5.4 卡诺图化简
  • 8.5.5 卡诺图中的相邻
  • 第9章 推理——逻辑的应用
  • 9.1 演绎推理
  • 9.1.1 认识演绎推理点
  • 9.1.2 三段论
  • 9.1.3 选言推理
  • 9.1.4 假言推理
  • 9.1.5 关系推理
  • 9.1.6 演绎推理综合实例
  • 9.2 归纳推理
  • 9.2.1 什么是归纳推理
  • 9.2.2 完全归纳推理
  • 9.2.3 不完全归纳推理
  • 9.3 足球比赛的得分
  • 9.3.1 粗心的记分员
  • 9.3.2 从已有数据推算出比分
  • 第10章 几何图形构造
  • 10.1 花盆摆放问题
  • 10.1.1 10盆花摆成5行,每行4盆
  • 10.1.2 转变思路,找出答案
  • 10.1.3 升级问题(10盆花摆10行,每行3盆)
  • 10.2 残缺的棋盘能补上吗?
  • 10.2.1 被切割的棋盘
  • 10.2.2 能拼接出残缺棋盘吗
  • 10.3 线条哪里去了?
  • 10.3.1 神奇的魔术
  • 10.3.2 解析丢失的线条
  • 10.4 图形剪拼
  • 10.4.1 均分三角形
  • 10.4.2 拼接正方形
  • 第11章 统筹规划
  • 11.1 认识统筹规划
  • 11.1.1 田忌赛马
  • 11.1.2 为什么会赢
  • 11.2 生活中的统筹规划
  • 11.2.1 匆忙的早晨
  • 11.2.2 如何节约运输成本
  • 11.3 著名的背包问题
  • 11.3.1 什么是背包问题
  • 11.3.2 用递归程序解决背包问题
  • 11.3.3 用穷举法解决背包问题
展开全部