Help us understand the problem. What is going on with this article?

ある整数が2で割り切れる回数を求める方法@Python

TL;DR

競技プログラミングで、ある整数を2で何回割れるかを求める必要があった。
ABC081B - Shift only
ベタに2で割り切れなくなるまでwhile文で回して求めていたけれど、もう少し、洗練されたやり方がないかを考えた。

求めたいこと

ある整数nは、2で何回割れるか?

整数 割り算 答え
2 2÷2=1 1回
8 8÷2=4
4÷2=2
2÷2=1
3回
100 100÷2=50
50÷2=25
2回

ベタな数え方

while文を使って、2で割り切れなくなるまで割り続ける

num = int(input())
cnt = 0
while num % 2 == 0:
    num //= 2
    cnt += 1
print(cnt)

多少は数学的かも知れない求め方

2進数に変換して、右から検索して、最初に1が出現するまでの0の個数を数えればそれが答えであることに気づいた

10進数 2進数 求め方 答え
2 10 1[0] 1
8 1000 1[000] 3
100 1100100 11001[00] 2

これをコードにすると以下の通り

num = int(input())
print(format(num, 'b')[::-1].find('1'))
  • 与えられた数字を2進数に変換する
  • 右から1が出現するまで0の個数を数える

注意事項

  • 所詮は、数学苦手なおじさん(42歳東京都)が背伸びできる範囲内で考えた解法
  • よりエレガントな求め方があれば、教えて下さい

蛇足:昨日時点のウルトラ糞コード

提出 #7088898 - AtCoder Beginners Selection

俺は何がしたかったんだろう・・・:scream:

dev100kg
正確には108kg/腰痛いおじさん/SIerでオウンドメディアを叫ぶ闇が深い課長さん
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした