limit = 17**2 # チェックする範囲の最大値
is_prime = [True] * (limit + 1) # 素数かどうかを記録するリスト。最初は全てTrueに設定
is_prime[0] = False # 0は素数ではない
is_prime[1] = False # 1は素数ではない
prime_cards = {} # どの素数で除外されたかを記録する辞書
# ここからが自動化の肝!
for p in range(2, int(limit**0.5) + 1):
# pがまだ素数だと判断されている場合
if is_prime[p]:
# pの倍数をすべて「ふるい」にかける
# p*pから開始するのは、pより小さな倍数は既に他の素数でふるい落とされているため
for multiple in range(p*p, limit + 1, p):
if is_prime[multiple]:
is_prime[multiple] = False
prime_cards[multiple] = p
# 結果をseとteに格納
se = []
te = []
for i in range(limit + 1):
if is_prime[i]:
se.append("o")
te.append(i)
else:
if i in prime_cards:
se.append(f"x.{prime_cards[i]}")
else:
if i == 1:
se.append("x.1")
elif i % 2 == 0: # 2で弾かれたけど、他の素数でも弾かれる場合は最初の素数を記録
se.append("x.2")
else:
se.append("x")
print(f'se: {se}')
print(f'te: {te}')
print(f'総チェック数: {limit}')
To embed this project on your website, copy the following code and paste it into your website's HTML: