過去ログ

25no12
#30813ダンディ海野さん

以下、出題者の表記に従って、特に断らない限り2進数で表記、漢数字は十進数とする

明らかに、
十で割り切れる⇔二つの素数二と五で割り切れる・・・(A)
二で割り切れる⇔1の位が0である・・・(B)

五で割り切れる条件について考える
五の二進数表記は101
1111=101*11より、1111は五の倍数
1+1111=10000より、
10000≡1 (mod 101)

よって、ある二進数Nについて、
N’=四の倍数の桁の合計×1000+四で割って三余る桁の合計×100+四で割って二余る桁の合計×10+四で割って一余る桁の合計
とすると、
N’≡N (mod 101)

さらに、N-101×n≡N (mod 101)なので、計算を簡単にするため、N’の計算に先立ち、飛び石で二つ並んだ1をすべて取り除く(二通り以上の取り除き方がある場合があるが、どちらでもよい)
この操作で0となる場合は五の倍数・・・(C)

計算されたN’について、上記操作を繰り返すことにより、五の倍数であるか判定できる

(B)と(C)から、十の倍数であるか判定する

分かりにくいので、例えば・・・

N=110010 (十進数の50)のとき、N’=0×1000+0×100+(1+1)×10+1=101
(C)の操作で飛び石の1が取り除けて0となるので、五の倍数
また、1の位が0なので(B)より二の倍数
よって、(A)から、Nは十の倍数

dobaさんのやり方はシンプルでいいですね−。
こちらは足し算だけでできるのが「強み」といえるか・・・。
   9月22日(土) 17:22:18     30815

過去問題一覧へ戻る