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}')

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: