《灯亮or灯灭》 --有个有趣的数论问题

这个问题是在网易公开课上看到的,传送门:http://open.163.com/movie/2016/7/4/U/MBQOS0ID9_MBQOSMH4U.html

问题描述:

  有100个灯泡,编号为1~n,开始都是灭的off状态,在第i回合按下所有编号为i倍数的的开关,灯泡转换一次状态,100回合,问最后有多少灯泡是on亮着的?

问题解析:

  提示:每一轮我们按了什么编号呢?

  回合和编号有什么关系?

  结果:

  如果当前回合是该灯泡编号的因数,该灯泡一定会被按。回合数范围是0~100,那么问题也就转换成了:

  例如:

编号8号等,它的因数有1,2,4,8,那么它将在1,2,4,8回合会被按一次,结果最后还是off状态,因为因数的个数为偶数次。

结论:

  所以最终也就变成了找灯泡编号的因数有奇数个的个数,因数都是成对出现的,只有完全平方数,最后一个对是相同的,那么就找1~n,i^2小于100即可。

那么就有 1 4 9 16........81 100.

  观察这些数的分布:

  

  相差成奇数递增间隔的分布,1到4,4到9,9到16,分别隔3,5,7.

Over..............

时间: 2024-08-19 09:43:13

《灯亮or灯灭》 --有个有趣的数论问题的相关文章

8个流水灯 亮灯 从1到8再从8到1

1 #include "reg52.h" 2 3 unsigned int x;//数组下标 4 5 unsigned char LED_1[]={0XFE,0XFD,0XFB,0XF7, 6 0XEF,0XDF,0XBF,0X7F,0XFF};//从1号灯->8号灯 7 8 unsigned char LED_2[]={0X7F,0XBF,0XDF,0XEF, 9 0XF7,0XFB,0XFD,0XFE,0XFF};//从8号灯->1号灯 10 11 //简单的延时器 1

socket通信——多角度控制LED灯亮灭

今天以物联网网关(网关链接)以服务器,在多个客户端就做一个非常简单的功能:点亮或熄灭网关上的LED灯.目前想到了三种方式,分别是:TCP&UDP测试工具.自编Java客户端和Mono Android客户端.相信这会很有意思的. 1.服务器端 在使用或编写客户端之前,首先来看看服务器端代码,其专门通过串口烧进网关内部 OutputPort led = new OutputPort((Cpu.Pin)GPIO_NAMES.PF8, false); Socket sc; Socket ss = new

四、按键控制LED灯亮灭

材料: 1.SAGOO UNO 1块: 2.按键模块 1块: 3.杜邦线若干. 步骤: 1.按照下图连接按键模块和UNO: SAGOO UNO引脚                                      按键模块引脚 3V3  <------------------------------------>    V(电源) GND <------------------------------------>    G(电源) Pin2  <----------

通过linux命令来控制板上GP_LED灯亮灭

通过linux命令来控制板上GP_LED灯亮灭 下图是在某网站找到的,这里我们可以看到GP_LED 是跟GPIO3相连.至于GPIO13,在此图上看,跟GP_LED没有啥关系,但为什么在blink草案中,却能控制GP_LED,这个留在下一帖.这里主要是通过对GPIO3的控制来实现GP_LED的亮灭. 下图是从开机到控制GP_LED亮灭的过程. 1.进入gpio的目录 2.通过ls指令可以看到在gpio目录下各个gpio口,这里找到gpio3 3.进入gpio3的目录 4.cat directio

TQ2440按键点亮LED灯的裸机程序

一,说到做ARM的裸机程序,很多人马上就会联想到一个名为ADS的开发工具,但是我们在linux下同样也可以做ARM的裸机程序,下面来说说其具体实施过程: 步骤一:编辑代码,这个没什么好说的. 步骤二:编译代码,编译代码分为三个方面的内容:1.链接脚本 2.用命令行确定链接时的文件顺序 3.用命令行编译.这三部分的内容可以全部写成一个Makefile文件,编译的时候执行make命令就可以了. 步骤三:把编译后的".bin"文件烧写进开发板,重新上电观察效果. 二,TQ2440按键点亮LE

1.2.第一个实验——点亮LED灯

1.2.第一个实验--点亮LED灯 预备知识: (1)位.字节.IO端口.IO口 字节是内存管理的最小单位,一个字节是八位,每一位可以存放一个二进制位(0或者1).一个IO端口包括一组IO口,一般一组是八个,一个端口就是一组IO引脚.一个IO口对应一个二进制位,一个IO端口对应一个字节. (2)二进制和十六进制的转换 一个十六进制位等于四个二进制位,比如0xff对应二进制是1111 1111 实验目的:点亮八颗LED灯 实验过程分析: (1)八颗LED分别由八位二进制位来控制,二进制位是1时LE

TI CC2530基础实验(普通GPIO操作——按一下按键亮一下灯)

有关CC2530的GPIO基本知识.普通GPIO操作有关寄存器的介绍.IAR Embedded Workbench IDE软件使用:TI CC2530基础实验(普通GPIO操作--点亮led灯) 电路原理图: 分析:需要按一下按键亮一下灯,并且不采用中断方式,即我们需要实时去监测按下是否被按下(P0_4为低电平表示按下,高电平表示松开). 设置: 灯LED1对应的P1_0引脚为普通I/O.方向为输出 按键S1对应的P0_4引脚为普通I/O.方向为输入 程序: /*****************

阅读笔记之《你的灯亮着吗》第三、四章

三.什么是真正的问题? 一家计算机生产商开发的新型打印机打印速度快,但精准度却非常不理想.这个工作组里最年轻的工程师丹研制出一种方法:改变下面显示的铝条,上面嵌着小针,可以很精确地在指定的点上扎出小洞来.丹的老板非常高兴,却在无意间被小针扎到了.也就是说,丹解决了一个问题,但这个解决方法又带来了新的问题.我们永远都不能消灭问题,但我们可以通过将产生的问题的影响变小来优化这个解决方法.即把问题放在“别人家的后院儿里”.这种技巧叫做转嫁问题.无疑是一种比较有效的方式.而后,作者又接连举出了几个实例来

你的灯亮着吗--随笔1

<你的灯亮着吗>是著名思想家温伯格的一本定义分析和解决问题的书籍.问题解决的第一步应该是描述问题.问题是你期望和和你体验间的差别,要分析和解决问题时候首先需要搞清楚什么是真正的问题,问题从哪里来是谁的问题等内容.在工作和生活中常犯的毛病是扭曲问题定义,自己人为的去解释和翻译问题从而导致把问题的解决方法做为问题的定义. 从而导致后续一连串的错误. 我认为本书的一个重要的点就是告诉大家如何去正确的认识问题,去定义一个问题.