当前位置: 首页 > news >正文

几个简单的数字问题引发的对计算机逻辑的浅显思考,细思有味。新手帖,高手勿砖。...

  在前段时间的学习中,遇到怎么判断一个数是否质数(素数),或者判断一个数是否是奇数的问题,在没有学习之前,我没有想到计算机是用什么样的方法实现的。我想原因在于人脑的思维和电脑的逻辑在很大程度上是不同的,人脑的思维是立体的,直观感觉电脑的逻辑是比较死板的,尽管她(付老说,计算机是大老婆,哈哈)在单纯计算方面和执行能力和准确率上都很有优势。比如,判断奇数,用n2求余来实现,余数不为0则为奇数,否则不是。是或者不是也就是计算机所"思考"true or false,其实两者是对立事件,用if判断很容易实现,而在其他情况下,不同分类之间也是严格的互斥,这也是ifelse if....else的理论基础。比如,一个确定的数,要么是正数,要么是负数,要么是0

  说到质数的判断,感觉这个思维还是很有味道的,细细想来。我们的逻辑是观察,稍微有点数学基础,第一反应直观的就能看出来是或者不是,甚至能看出质因数来。而计算机是个很敬业的boy,他要很严谨地一个数一个数地去试,还是有顺序有套路的,这就产生了从2开始一直到n-1去除n(拟判定的值)的逻辑,如果在这个依次进行的过程中找到了一个数并且是第一个数能被n整除,就可以判定n是合数不是质数了,接下来他便不管了,事情做完了呀,看来他还很专业,多余的工作是没必要做的。如果没找到那最好,啥事没有,啪一个标签质数。这样,n%i==0i=2;i<n;i++)再来一个for循环就实现了质数判断。

  那么问题来了,我们能判断是不是奇数或者质数的前提是该数最起码是个整数,而质数前提还要是正整数。是不是正数其实很好判断,如果n<=0便直接丢掉。那么是不是整数呢,我们之前没有接触到,怎么判断呢?

  我想了很多办法,总觉得差那么一点。刚开始编程,其实并没有真正理解计算机的逻辑,更不能设身处地地给计算机输入一个他能听懂的指令或者待实现的想法。回头联想一下质数和奇数的实现过程,其实计算机很单纯很天真,看看下面这个语句n*10/10==0,my gold,这不就判定n是整数了么。一乘一除,以退为进,这真不是一个编程逻辑小白能想到的,人脑一般也不是这样思考问题的。下面我们再来看一个的数字问题的呈现过程。

  求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+n

  代码简介明了却是意味深长,仔细想想是不是很有意思呢,亲测可行哦(输出计算式的代码没有写上去,也不是本文讨论的重点)。当然实现的方法有很多种,我们不妨运用一下我们的数学知识,先将这个数列做个分析计算,不难得出:当n是偶数时,和sum=-n/2;n是奇数时,sum=(n+1)/2。下面看看实现代码和运行结果:

                

  同样也是可行的。接下来我们比较一下这两种思路哪个更优秀呢?

  显然第二种思路是更接近我们人脑的一种分析方法,这也使得这种方法对于编程来说显得很暴力,计算机在实现过程中只起到输出也就是显示器的作用,并没有将他强大的计算能力发挥出来,因为真正的计算和思考我们已经代劳了。所以接下来我们应该更倾向于第一种方法的逻辑,尝试用计算机的"思维"去解决实际的问题。

  本贴权且写到这里,关于更多的数字的问题,下一篇会举到更多的一些例子,细加品尝也非常的有趣。

转载于:https://www.cnblogs.com/zhaoweizu/p/6686827.html

相关文章:

  • The declared package XX does not match the expected package src.main.java.XX
  • 常用的文件和目录操作命令(转)
  • 算法面试题:寻找数组中重复的数字
  • Java基础——九种基本数据类型,及其封装类
  • 代码同时上传到github和码云
  • maven install出现 找不到符号问题
  • 算法面试题: 斐波那契数列
  • dubbo-springMVC-idea-mac开发环境搭建part3-nexus安装配置(maven私库)
  • 算法面试题:整数反转
  • 算法面试题:多数元素
  • 《改变你一生的108个心理学法则》读书笔记
  • linux 安装jdk1.8并配置环境变量(超简单方便)
  • idea project设置jdk
  • 帝国后台修改密码
  • 算法面试题:数组中重复的数字
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • angular2 简述
  • ComponentOne 2017 V2版本正式发布
  • fetch 从初识到应用
  • JavaWeb(学习笔记二)
  • leetcode46 Permutation 排列组合
  • Mocha测试初探
  • mongo索引构建
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • vue-cli在webpack的配置文件探究
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 阿里云前端周刊 - 第 26 期
  • 彻底搞懂浏览器Event-loop
  • 程序员最讨厌的9句话,你可有补充?
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 规范化安全开发 KOA 手脚架
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 网页视频流m3u8/ts视频下载
  • ionic入门之数据绑定显示-1
  • Linux权限管理(week1_day5)--技术流ken
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​2021半年盘点,不想你错过的重磅新书
  • !$boo在php中什么意思,php前戏
  • #ifdef 的技巧用法
  • #Linux(帮助手册)
  • #LLM入门|Prompt#3.3_存储_Memory
  • #NOIP 2014# day.1 T2 联合权值
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (分布式缓存)Redis分片集群
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (汇总)os模块以及shutil模块对文件的操作
  • (转)Scala的“=”符号简介
  • (转)为C# Windows服务添加安装程序
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .bat批处理出现中文乱码的情况
  • .cfg\.dat\.mak(持续补充)