プログラマ脳を鍛える数学パズル 16
3本の紐があって、1本を正方形、2本を長方形にしたとき…と言う様な問題。
プログラマ脳を鍛える数学パズル シンプルで高速なコードが書けるようになる70問
- 作者: 増井敏克
- 出版社/メーカー: 翔泳社
- 発売日: 2015/10/14
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (11件) を見る
式変換をした跡が残ってるけどそのまま記載。
ただし、問題の制約条件で、同じ比率の組み合わせを除外すると言ってるのが実は引っ掛け。
ここを読み飛ばすと、170 個超えて、結果が合わなくて「ん?」ってなる(というか踏んだ)
from itertools import combinations from math import gcd N = 500 count = 0 # sq * sq # = ((sq - x) + (sq + x)) + ((sq - y) * (sq * y)) # = (sq*sq - x*x) + (sq*sq - y*y) # -sq^2 = -x^2 -y^2 # sq^2 = x^2 + y^2 for n in range(1, int(N / 4) + 1): sqrt = n * n # 正方形に一辺を超えない範囲で二つの四角の一辺補正値を選ぶ # モノが四角形の一辺の為、正方形の一辺を超えると、 # 四角形のくせに1辺がマイナス長とか意味不明な事象が起きるので for x, y in combinations(range(1, n), 2): if sqrt == x*x + y*y: if gcd(x, y) == 1: # 同じ比率の整数倍を弾く count += 1 print(count)