(数学)灯泡亮灭问题
題目:
現在有10000個電燈,假設有10000個人經過這些電燈,當第1個人經過時,拉一下所有的燈,當第2個人經過時,拉一下所有2的倍數的燈,就這樣,當第i個人經過時,就拉一下所有i的倍數的燈。假設所有燈的初始狀態都是滅,那么當10000個人經過之后,還有多少燈是亮著的?
思路:
我們以10個燈泡,10個人為例,拉一下表示1,不拉表示0,橫軸表示燈,豎軸表示人,因此可以得到以下的矩陣:
1 1 1 1 1 1 1 1 1 1
0 1 0 1 0 1 0 1 0 1
0 0 1 0 0 1 0 0 1 0
0 0 0 1 0 0 0 1 0 0
0 0 0 0 1 0 0 0 0 1
0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 1
可以看出,最后亮燈的就是1,4,9,因為它們被拉了奇數次。一種通用的方法就是將上述矩陣所有列進行異或操作,如果為1則亮,為0則滅。
那么亮燈的數字有什么規律嗎?如上面的1,4,9....,好像很容易猜到是某個數的完全平方,為什么呢?我們來驗證一下:
上面提到了,亮燈的是被拉了奇數次,而完全平方數的分解因子(即約數)一定為奇數個。下面通過歸納法來驗證一下。
假設完全平方數為N,N=1*A^2,它的約數個數為奇數個;
假設A為質數,那么N的約數為1,A,N三個,為奇數;
假設A為完全平方數,那么N的約數為1,A,N,加上A的約數減去1和自身A,依舊為就奇數;
假設A為非完全平方數,那么N可以表示為A=B*C,這一步暫時不知怎么證明,但結果就是奇數;
總之,只有完全平方數,其約數個數為奇數,就是亮燈的情況。
因此,10000剛好為100的完全平方,因此有100盞燈亮著。
也可以通過代碼來驗證一下(很簡單,通過兩個循環就可以實現,這里就不貼代碼了)
轉載于:https://www.cnblogs.com/AndyJee/p/4966186.html
總結
以上是生活随笔為你收集整理的(数学)灯泡亮灭问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中信银行信用卡年费多少 费年怎么免除
- 下一篇: 浙能电力2021年目标价 罕见涨停引机构