$1 \sim n$ までのカードを並び替えて素数になる確率を、Pythonでサーベイしました。
こちらの記事に、次の話題がありました。
ここに、1~9の数字が書かれたカードが1枚ずつ、合計9枚あります。
これらのカードを自由に並び替えて9桁の整数を作ります。
その数が素数になるように並べることはできるでしょうか?
素数の不思議 – 素数の魅力を紹介しています!
$1 \sim n$ のときは,どうなるか考えてみました。
とりあえず、$ n \leq 9$ のときだけを考えました。
def sigma(m, n, func, s = 0) :
if m > n: return s
return sigma(m + 1, n, func, s + func(m))
これで、和の関数を定義しました。この関数は、完全に次のサイトを参考にしました。
あとは、ポツポツと、コードを組みました。
Pythonでピックアップさせました。
#1~nのカードを並べ替えたときの整数の素数判定
from sympy import isprime
import itertools
n = int(input("桁数を入力してください。"))
card = []
for i in range(1,n+1):
card.extend([i])
perm = list(itertools.permutations(card))
s = len(perm)
t = 0
z = 0
while t <= s-1:
number = sigma(0, n-1, lambda x : perm[t][x]*10**(n-x-1))
if isprime(number) == True:
print(str(number)+"は,primeです。")
z=z+1
t = t+1
print("素数の個数は"+str(z)+"個です。ちなみに,すべての整数の個数は,"+str(s)+"個です。")
print("素数になる確率は"+str(z/s)+"です。")
こうやってあげると、カードの並べ方の総数のうち、素数が現れる確率まで求めることができました。
結果1($1 \sim 4$ のとき)
素数は「4個」でした。
結果2($1 \sim 7$ のとき)
素数は「534個」でした。
ちなみに、このアルゴリズムで「n=10」に設定すると、えらいことになりました。
冗談抜きに、「素数の宝箱や〜」と、ほんまになりました。
ちゃんちゃん。