切換
舊版
前往
大廳
主題

ZeroJudge - d646: I2A的陰謀 解題心得

Not In My Back Yard | 2018-08-16 17:58:44 | 巴幣 0 | 人氣 145

題目連結:

題目大意:
給定兩個二進位數字(長度不超過1000000),求兩數的最大公因數(以二進位表示)。

解題思維:
觀察任意兩個二進位數字(以下稱A、B,且A ≧ B),得:

當A、B的尾數為0時,最大公因數也會有0作為結尾,因此(除以2意指刪除尾數)
GCD(A, B)=GCD(A / 2, B / 2)+「0」作結尾。

當A尾數為1、B尾數為0時,最大公因數不會有0,得
GCD(A, B)=GCD(A, B / 2)

當A尾數為0、B尾數為1時,最大公因數也不會有0,故
GCD(A, B)=GCD(A / 2, B)

當兩數尾數皆為1時,最大公因數便可以透過輾轉相除法(這邊只有用減的)。又因兩數皆為奇數(是二進位數字且尾數為1,而為奇數),所以互減之結果必為偶數。但根據上面的情況,一奇一偶又可以對偶數那方除以2,所以
GCD(A, B)=GCD(A, (A-B)/ 2)

而不需多說,A=B時,最大公因數即為彼此。

以第1~4條規律作為遞迴條件,並以最後一條作為終止條件,即可找到所需之答案。

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

創作回應

相關創作

更多創作