Juliaで平方数、ピタゴラス数、双子素数を求める方法

どうも、木村(@kimu3_slime)です。

今回は、Juliaで平方数、ピタゴラス数、双子素数を求める方法を紹介します。

 

準備

Primesを使うので、持っていなければインストールしておきましょう。

準備として、以下のコードを実行しておきます。

 

平方数

次のようにすれば、平方数(ある整数の2乗で表される整数)が求められます。

これは配列の内包記法(comprehension)と呼ばれる書き方です。

「[a^2 for a=1:10]」は、「a^2 を成分とする配列を作る、ただしaは1以上10以下の整数」という意味ですね。

 

さらにif文を加えると、条件を満たす数を集めることができます。「if 1000<= a^2 <= 2000」でaは1000以上2000以下です。

 

if文において「&」(かつ)を加えて、条件を増やせます。「rem(a,2)」はaを2で割ったあまり、「rem(a,2) !==0」は2で割ってあまり0でない、つまり奇数の平方数を求められます。

 

ピタゴラス数

\(a^2 +b^2 = c^2\)を満たす正の整数の組\((a,b,c)\)を、ピタゴラス数、ピタゴラスの3つ組(Pythagorean triple)と呼びます。

その一覧を求めてみましょう。「(a,b,c)」で3つ組を表せます。

 

\((6,8,10)\)と\((8,6,10)\)は、\(a,b\)を入れ替えただけで実質1つです。\(a\leq b\)という条件を加えても、ピタゴラス数は変わらずに求められます(一般性を失わない)。

 

さらに、\((6, 8, 10)\)は\((3, 4, 5)\)のそれぞれの2倍になっています。\((a,b,c)\)がピタゴラス数ならば、それぞれを整数倍した\((ka,kb,kc)\)もピタゴラス数です。

\((6, 8, 10)\)のようなケース、それぞれの数が互いに素でないときは原始的(primitive)でないと呼ばれます。\((3,4,5)\)は原始的(互いに素)です。

Juliaでは、最大公約数が1に等しい「gcd(a,b,c) ==1」で、互いに素であることを判定できます。

きちんと原始性の判定ができています。これを使って、原始的なピタゴラス数の一覧を求めてみましょう。

 

双子素数

「primes(a,b)」で、a以上b以下の素数の配列が得られます。

 

これを応用して、差が2であるような素数:双子素数(twin prime)を求めてみましょう。

「双子素数が無限に存在するか」という数学的な問題は、2022年時点では、未解決問題として知られています。

参考:双子素数 – Wikipedia

 

以上、Juliaで平方数、ピタゴラス数、双子素数を求める方法を紹介してきました。

配列の内包記法を使えば、さまざまな条件を満たす整数の一覧を求められます。コンピュータならば条件を満たす数を探すのは簡単なので、いろいろ試してみると面白いですね。

木村すらいむ(@kimu3_slime)でした。ではでは。

 

1から始める Juliaプログラミング
進藤 裕之(著), 佐藤 建太(著)
コロナ社 (2020-03-26T00:00:01Z)
5つ星のうち4.5
¥7,353 (コレクター商品)

 

こちらもおすすめ

集合の要素、部分集合、等しいことの証明の書き方

一般性を失わない(without loss of generality)とは、例

Julia(Primes)で素数判定、素因数分解する方法