1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

フェルマーの二平方和定理の応用

Last updated at Posted at 2022-05-14

以下のような問題を考えます

【問題】$x^2+y^2=1105$を満たす自然数$(x,y)$の組をすべて求めよ

フェルマーの二平方和定理

フェルマーの二平方和定理(高校数学の美しい物語)によると

\begin{align}
 奇素数pが \; p&=x^{2}+y^{2} (x,y \in \mathbb{Z})と表せる \\ \Leftrightarrow p&\equiv 1\pmod {4} \dots (1) \\
\end{align}

ブラーマグプタ-フィボナッチ恒等式(BF恒等式)

以下の式が成り立つので$x^2+y^2$で表される2つの数$m,n$があるとき、その積$m \times n$も$x^2+y^2$で表される。
しかもその$(x,y)$のペアの数は2倍になる。

\begin{align}
&(a^2 +b^2)(c^2+d^2) \\
&=(ac−bd)^2+(ad+bc)^2 \\
&=(ac+bd)^2+(ad−bc)^2 \dots (2) \\
\end{align}

右辺の素因数分解

【問題】ですが、右辺$1105$の素因数分解をすると、3つの素数の積になり、しかも3つとも4で割った余りが1となっていることが分かります。

1105 = 5 \times 13 \times 17

従って各々は$x^2+y^2$で表すことが出来ます。

\begin{align}
1^2+2^2 &= 5 \\
2^2+3^2 &= 13 \\
1^2+4^2 &= 17 \\
\end{align}

BF恒等式のコード

(2)のBF恒等式を使うと例えば$5 \times 13 = 65$に対して$(x,y)=(1,8),(7,4)$の2通りの解が求まります。

def bf(a,b,c,d):
  return ((abs(a*c-b*d),abs(a*d+b*c)), (abs(a*c+b*d),abs(a*d-b*c)))
print(bf(1,2,2,3))
# ((1, 8), (7, 4))

最終的な$1105$はこれらの解それぞれに$7$の$(1,4)$をbfで掛ければ良いので。

print(bf(1,8,1,4))
print(bf(7,4,1,4))
# ((31, 12), (33, 4))
# ((9, 32), (23, 24))

一応検算してみると正しい結果になりました。

for x,y in [(31, 12), (33, 4), (9, 32), (23, 24)]:
  print(f"{x}^2+{y}^2 = {x**2+y**2}")
\begin{align}
31^2+12^2 &= 1105 \\
33^2+4^2 &= 1105 \\
9^2+32^2 &= 1105 \\
23^2+24^2 &= 1105 \\
\end{align}

解答

  • $(x,y) = (31, 12),(33, 4),(9, 32),(23, 24)$

この考え方はEuler Project: Problem 273を解くのに役に立ちます。

(開発環境:Google Colab)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?