いい加減python3に慣れておいた方がよいかと思ったので今回からpython3。
今のところ「xrangeなくなったんやなー」とか「printに'()'つけるんやなー」くらいしか変化を感じてないけども。
Problem 26 「逆数の循環節 その1」
単位分数とは分子が1の分数である. 分母が2から10の単位分数を10進数で表記すると次のようになる.
1/2 = 0.5
1/3 = 0.(3)
1/4 = 0.25
1/5 = 0.2
1/6 = 0.1(6)
1/7 = 0.(142857)
1/8 = 0.125
1/9 = 0.(1)
1/10 = 0.1
0.1(6)は 0.166666... という数字であり, 1桁の循環節を持つ. 1/7 の循環節は6桁ある.
d < 1000 なる 1/d の中で小数部の循環節が最も長くなるような d を求めよ.
def hoge(num):
ans = 0
for d in range(2, num):
# 2、5で割れる数字が分母なら循環小数にはならない(たぶん)
if d % 2 == 0 or d % 5 == 0:
continue
(i, remainder) = (1, 10)
lst_remainder = []
while True:
remainder = remainder % d
# 過去に同値の余りが出現していたらループを抜ける
if remainder in lst_remainder:
break
# 余りをリストに貯めていく
lst_remainder.append(remainder)
(i, remainder) = (i + 1, remainder * 10)
# リストのインデックスを利用し循環節の長さを計算
cycle_length = i - (lst_remainder.index(remainder) + 1)
if ans < cycle_length:
ans = d
return ans
print (hoge(1000))
変数名とかもちゃんとしていこうと思う今日この頃。