sciencompass

今勉強していること、これまで勉強してきたことを発信してます。半導体物理や数学、英語などの記事を書いています。

日記

“セクシー”な数字たち その2

投稿日:

以前、こちらの記事でセクシーな素数について紹介しました。

素数の数は無限に存在するので、セクシーな素数も当然、無限に存在すると考えられます。(5, 11), (11, 17), (13, 19)ぐらいはすぐに思いつきますが、大きな数になるとなかなか思いつきません。そもそも大きな数字だと素数かどうか判定するのが大変です。

そこで、Pythonを使って、セクシーな素数を数え上げるプログラムを作ってみました。ソースコードは、最後に載せてあります。

プログラムは①2から1000までの整数の中から、素数を数え上げ素数のリストを作る②素数リストの要素の差を順番に計算し、差がちょうど6の素数をリストアップしていく、という内容になります。

これによって数え上げると、素数は全部で168個あり、セクシーな素数は74組あることがわかります。一番大きなセクシーな素数は、(991, 997)です。ここまでくると、手で数えていくのは大変な数字になりますね。プログラムを少し変えれば、もっと大きなセクシーな素数を見つけることもできます。私が確認した一番大きなセクシーな素数は、(999953, 999959)です。

ここまでお読みいただきありがとうございます。以下は私が作成したセクシー素数を数え上げるプログラムのソースコードになります。
それではまた次の記事でお会いしましょう。

ソースコード

# -*- coding: utf-8 -*-
import numpy as np
prime = []

for n in range(2, 1001):
    num = int(np.sqrt(n))
    if num == 1:
        prime.append(n)
        #print(str(n) + ' is prime')
    else:
        for i in range(2, num + 1):
            if n % i == 0:
                #print(str(n) + ' is composite')
                break
    if i == num and n % i != 0:
        prime.append(n)
        #print(str(n) + ' is prime')

print(prime)

print(len(prime))
sexy_primes = []
s_prime = []
for i in range(len(prime)-1):
    if i < len(prime) - 1:
        for j in range(i + 1, len(prime)):
            if prime[j] - prime[i] == 6:
                s_prime.append(prime[i])
                s_prime.append(prime[j])
                sexy_primes.append(s_prime)
                #print("sexy " + str(prime[i]) + "&" + str(prime[j]))
    else:
        if prime[i + 1] - prime[i] == 6:
            s_prime.append(prime[i])
            s_prime.append(prime[i+1])
            sexy_primes.append(s_prime)
            #print("sexy " + str(prime[i]) + "&" + str(prime[i+1]))
    s_prime = []

print(sexy_primes)
print(len(sexy_primes))

Appendix A. ソースコード解説

--- coding: utf-8 ---
import numpy as np
prime = []

for n in range(2, 1001):
num = int(np.sqrt(n))
if num == 1:
prime.append(n)
#print(str(n) + ' is prime')
else:
for i in range(2, num + 1):
if n % i == 0:
#print(str(n) + ' is composite')
break
if i == num and n % i != 0:
prime.append(n)
#print(str(n) + ' is prime')

print(prime)

ここまでが、指定した範囲の整数の中で、素数であるものを数え上げ、リストを作成する部分になります。素数かどうかの判定は非常に単純で、判定したい整数よりも小さい数字で順番に割っていき、割り切れなかったら素数と判定しています。このとき、割る数は判定する整数の平方根以下の整数までで十分です。

print(len(prime))
sexy_primes = []
s_prime = []
for i in range(len(prime)-1):
    if i < len(prime) - 1:
        for j in range(i + 1, len(prime)):
            if prime[j] - prime[i] == 6:
                s_prime.append(prime[i])
                s_prime.append(prime[j])
                sexy_primes.append(s_prime)
                #print("sexy " + str(prime[i]) + "&" + str(prime[j]))
    else:
        if prime[i + 1] - prime[i] == 6:
            s_prime.append(prime[i])
            s_prime.append(prime[i+1])
            sexy_primes.append(s_prime)
            #print("sexy " + str(prime[i]) + "&" + str(prime[i+1]))
    s_prime = []

print(sexy_primes)
print(len(sexy_primes))

この部分で素数のリストの要素を一つ一つ差分をとって、差が6になるかどうかを調べて、リストアップしています。二つの差が6以上になった時点で、次の要素に移るようにしたほうが、処理ははやくなります。記事を書いているときに気づきました。今後、改良しておきます。

-日記
-, , , ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

Appleを騙る偽メール 見破る4つのポイント

こんにちは。 Appleを騙る偽メールが巷を騒がせています。その手口は”あなたのIDが何者かに不正に使用されているからアカウントの設定を確認してください”とメールを送り、偽のAppleログインサイトに …

英語でひねりを加えるは何と言うか?

皆さん、こんにちは! GWも終わり、いつもの日常が始まりましたね。私も今日から仕事が始まりましたが、休みボケがひどくて正直つらかったです(^^;)まあ、愚痴はさておき英語を勉強していてなるほどな~と思 …

空が青いのと海が青いのは理由が違う

子供の時になぜ空は青いのか、なぜ海は青いのか疑問に思っていた。そんな疑問を持っていたからだろう、名探偵コナンを見ていた時にコナンが、”空が青いのと海が青いのは理由が違うだろ”と言ったセリフが大人になっ …

NHKラジオ講座はじめました!

みなさん、こんにちは!なるてると言います。 今年からNHKラジオ講座でドイツ語と英語を勉強しているのですが、これすごく良いですね!一番の理由は、ラジオを録音しておけば、自分の好きな時に勉強することがで …

切符を久しぶりに買ったので、数字遊びしてみた

皆さんこんにちは!GW後半が始まり、皆さんいかがお過ごしでしょうか?私は実家でのんびりする予定です。 さて、昨日映画を観に出かけたのですが、その時にSuicaを忘れてしまい、切符を買うことになってしま …