【数学】因倍数解开灯问题

       想象有N盏灯,每盏灯都有一个独立开关,开关的编号从1-N,由一条线排列且现灯均关,依照倍数开关灯。即切换所有编码为1的倍数开关,然后切换所有编码为2的倍数开关,最后切换所有编码为3的倍数开关,以此类推,直到切换编码为N的倍数开关。(一次切换指的是将关着的灯打开,或将开着的灯关上。)                                                                                                                        当完成100步(N=100)操作后,哪些灯是开着的,哪些灯是关着的?你发现规律了吗?你能说明原因吗?

        这道题其实是一道优化算法,用我们小学五年级就可以到的找规律可以得到:

切换灯开关完成所有操作之后,只有编号为1 4 9 16 25 36 49 64 81 100的灯也就是编号为平方数这些灯还在亮着。

编号为N的灯泡为例,在X操作之后,只有在X的是N的因数的情况下,灯泡N的情况才能变化。(因数指的是可以整除N的数)。所以大多数因数都是成对出现的,假如J是是N的因数,那么N/J也是N的因数。只有在 J=N/J 时,因数(开关灯的次数)的个数为奇数。如:

1 - 4为例://“1”和“0”分别表示“开”和“关”两种情况

0 0 0 0 //初始

1 1 1 1 //因数1

1 0 1 0 //因数2

1 0 0 0 //因数3

1 0 0 1 //因数4

//1的因数为1;4的因数为1,2,4;........

可得奇数因数个数为开灯。

由J=N/J可得N=J^2,故只需知道1-N个数有几个平方数即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值