切換
舊版
前往
大廳
主題

ZeroJudge - d336: 一即是全、全即是一 解題心得

Not In My Back Yard | 2018-08-15 15:51:47 | 巴幣 0 | 人氣 111

題目連結:

題目大意:
給定一個二進位數字(長度不超過9000),試求可否被3整除。

解題思維:
由於測資頗多,又因為除數固定是3。因此有方法可以比上一篇文章快。

以abcd代為任意長度為4的二進位數字。根據定義,可以寫作:
a * 2 ^ 3+b * 2 ^ 2+c * 2 ^ 1+d * 2 ^ 0
經由一些觀察並做一些變換,即為:
[a * (2 ^ 3 -2)+b * (2 ^ 2 -1)+c * (2 ^ 1 -2)+d *(2 ^ 0-1)][2a+b+2c+d]
可以看到算式的第一個中括號包起來的部分(即深灰色部分)會被3所整除,只要判斷第二個中括號的部分就可以了(即水藍色部分)。如果第二部分可以被3整除,也就表示原式也可以被3整除。

也就是說,要判斷一個二進位數字可否被3整除,只要判斷「奇數位+2倍的偶數位」可否被3整除。大大地省下了取餘數的時間,不用擔心會超時。

P.S.:同樣的變換運用在十進位上,就成為了「為何所有位數相加若是3的倍數,那原本的數字也是3的倍數」之證明。


此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大們可以提出來討論。

創作回應

相關創作

更多創作