「Python実行例 素数に関する計算」の版間の差分

提供: つれづれウィキ
ナビゲーションに移動 検索に移動
 
2行目: 2行目:
  
 
<pre>
 
<pre>
# 必要なモジュール、クラス、関数の読み込み
+
# 必要なモジュール、クラス、関数の読み込み(下の2行は場合によってはなくてもよい)
 
import matplotlib.pyplot as plt
 
import matplotlib.pyplot as plt
 
import math
 
import math
10行目: 10行目:
 
prime = [True for i in range(n+1)]
 
prime = [True for i in range(n+1)]
 
prime[1] = prime[0] = False
 
prime[1] = prime[0] = False
for i in range(2, math.ceil(math.sqrt(n))):
+
for i in range(2, n):
# for i in range(2, n):
+
    if prime[i]:
        if prime[i]:
+
        for j in range(2*i, n+1, i):
            for j in range(2*i, n+1, i):
+
            prime[j] = False
                prime[j] = False
 
  
 
# 素数を列挙する
 
# 素数を列挙する

2023年6月22日 (木) 16:29時点における最新版

実行例を示します。

# 必要なモジュール、クラス、関数の読み込み(下の2行は場合によってはなくてもよい)
import matplotlib.pyplot as plt
import math

# 素数に印をつける(エラトステネスの篩)
n = 100
prime = [True for i in range(n+1)]
prime[1] = prime[0] = False
for i in range(2, n):
    if prime[i]:
        for j in range(2*i, n+1, i):
            prime[j] = False

# 素数を列挙する
for p in range(n+1):
    if prime[p]:
        print(p, end=' ')

# n = 10000 としてエラトステネスの篩をやり直す

# 素数を列挙する(整形版)
column = 0
for p in range(n+1):
    if prime[p]:
        column += 1
        if column % 10 == 0:
            print(f'{p:6}')
        else:
            print(f'{p:6}', end='')

# 双子素数を列挙する
twin_primes = []
for p in range(n+1):
    if prime[p]:
        if prime[p+2]:
            twin_primes.append([p, p+2])

print(twin_primes)

# 三つ子素数を列挙する
prime_triplets = []
for p in range(n+1):
    if prime[p]:
        if prime[p+2]:
            if prime[p+6]:
                prime_triplets.append([p, p+2, p+6])
        elif prime[p+4]:
            if prime[p+6]:
                prime_triplets.append([p, p+4, p+6])

print(prime_triplets)

# 浜田の三つ組素数を列挙する
h_prime_trinity = []
for p in range(n+1):
    if prime[p]:
        if prime[p+6]:
            if prime[p+12]:
                h_prime_trinity.append([p, p+6, p+12])

print(h_prime_trinity)

# 100 以下の素数の数
sum(prime[1:101])

# 10000までの素数を求めた後、100ごと、あるいは1000ごとの素数の数を数えてグラフにする
num_prime = []
for i in range(100):
    num_prime.append(sum(prime[i*100:(i+1)*100]))

print(num_prime)

plt.plot(num_prime)

num_prime = []
for i in range(10):
    num_prime.append(sum(prime[i*1000:(i+1)*1000]))

plt.plot(num_prime)

この他にも色々試して、追加してください。