87654321盏灯!

小明现在有87654321盏灯⊙﹏⊙b汗。
现在有编号为1~87654321的灯初始状态是全开着的,现进行如下操作:
编号是1的倍数的灯拨一下开关;
编号是2的倍数的灯再拨一下开关;
编号是3的倍数的灯再拨一下开关;
…………
如此直到87654321的倍数。

问:此时还有多少盏灯仍然是开着的。

------------------------------------------------------------------------------------------------------------------------

这种复杂的问题 不能使用暴力来解决,那么需要我们来找规律了~~

首先考虑:

一、灯亮着的灭着的区别么?

初始状态的时候都是开的,我们可以从被按的次数方面来分析,被按的次数可以分为:

偶数次:列如 4次   关  开 关 开

奇数次:列如3次    关  开  关 

这样就明了,当按的次数为偶数次的时候,灯是亮的,为奇数次的时候,灯是关的。


那么下面我们思考第二个问题。。

二、被按的次数由什么决定?

我们来分析编号为100的这盏灯,

编号为1的倍数情况下:按开关, 此时灯的情况是熄灭的。

编号为2的倍数情况下:按开关,此时灯的情况是开亮的。

编号为4的倍数情况下:按开关,此时灯的情况是熄灭的。

编号为5的倍数情况下:按开关,此时灯的情况是开亮的。

编号为10的倍数情况下:按开关,此时灯的情况是熄灭的。

编号为20的倍数情况下:按开关,此时灯的情况是开亮的。

编号为25的倍数情况下:按开关,此时灯的情况是熄灭的。

编号为50的倍数情况下:按开关,此时灯的情况是开亮的。

编号为100的倍数情况下:按开关,此时灯的情况是熄灭的。

1,2 ,4,5 10 20 25 50,100  可以看到这些数字全部都是100的约数。

那么可以得出编号为N的灯,他的被按的次数,就是N 约数的个数。。


三、那约数的个数奇偶由什么决定?

我们来分析几个数字的约数把

50  1,2,5,10,25,50
49  1,7,49            //个数为奇数
48  1,2,3,4,6,8,12,16,24,48。
47  1,47
46  1,2,23,46
45  1,3,5,9,15,45
44  1,2,4,11,22,44
43  1,43
42  1,2,3,6,7,14,21,42
41  1,41
40  1,2,4,5,8,10,20,40
39  1,3,13,39
38  1,2,19,38
37  1,37
36  1,2,3,4,6,9,12,18,36  //约数个数为奇数


可以发现  49   和 36  她们的约数个数为奇数。。

那么我们来分析一下49和36的特质 

49=7^2;

36=6^2;

这些数字都是平方数,那么我们换个数字来验证一下把

5^5 等于 25

25的约数:1、5、25      -- 3个约数  为奇数 那么 25 一定是关灯的,不信我们来验证一下。


编号为25的灯,默认状态是开亮的。

当编号为1的倍数时:按开关,灯熄灭,

当编号为5的倍数时,按开关,灯开亮,

当编号为25的倍数时,按开关,灯熄灭,

果然 结果如预测所料!!


那么我们可以由此得出结论  --- 

 1^2、  2^2、 3^2、 4^2 、5^2、 6^2  等等---- 编号为这些平方的值的数字一定是关灯的。

那么我们要求87654321里面有多少个这样的数字呢 我们对其开平方即可~~

在java里面可以使用  Math.sqrt(); 方法

那么我们代码可以这些写

int i = 87654321 - (int) Math.sqrt(87654321);


由于开出平方是double类型的我们可以转成int 去除小数,因为小数对我们来说没有意义!

列如 9 和 10 ,9里面的平方值的数字有 1 4 9 ,10里面也是 1 4 9 但是10开平方有小数所以小数对于我们来说没意义,我们用(int) 转换由int强转后的数字就是编号1-87654321 里面有多少栈灯熄灭,用总的减去熄灭的就等于亮的那么结果就是 :87644959

特别谢谢Teddy大神的指点迷津。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值