題目連結:
給定一個二進位數字(長度不超過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的倍數」之證明。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大們可以提出來討論。