見出し画像

python:配列と素数

全く意味は無いけど、ふと頭に浮かんだ事をやってみました。

仕様


ユーザーが数字を入力し、その数字をもとに2次元配列を作成します。
左上段が開始位置の「1」、右下段が終了位置(ユーザーが入力した数値)
です。
これに素数の場合に色を付けます。

例1
数字=3

「例1」の解説
左上段が「1」で素数ではないので白
中央上段が「2」で素数なので黒
右上段が「3」で素数なので黒
左中段が「4」で素数ではないので白
中央中段が「5」で素数なので黒
右中段が「6」で素数ではないので白
左下段が「7」で素数なので黒
中央下段が「8」で素数ではないので白
右下段が「9」で素数ではないので白

例2
数字=10

例3
数字=70

素数の発生にルールが有るかと思い、作成してみました。
ただ、画面サイズの問題で上限があり、「数字=100」などでは全て見られません。

以下、ソースです。

pip install numpy
import numpy as np
import tkinter as tk
from tkinter import simpledialog, messagebox

# 素数判定関数
def is_prime(num):
    if num < 2:
        return False
    for i in range(2, int(np.sqrt(num)) + 1):
        if num % i == 0:
            return False
    return True

# ダイアログで配列のサイズを入力
root = tk.Tk()
root.withdraw()  # メインウィンドウを非表示にする

n = simpledialog.askinteger("入力", "配列のサイズを入力してください:")

# 2次元配列を作成し、1から始まる数をセット
array = np.arange(1, n * n + 1).reshape(n, n)

# 結果を表示
result = ""
for i in range(n):
    for j in range(n):
        value = array[i][j]
        if is_prime(value):
            result += "■"
        else:
            result += "□"
    result += "\n"

# 結果をフォームで表示
messagebox.showinfo("結果", result)

この記事が気に入ったらサポートをしてみませんか?