任意の数の約数一覧・素数一覧・素因数分解を計算するプログラムです。
PythonとAnacondaをインストールした後、JupyterNoteBookに以下のソースコードを貼り付けて実行してください。
実行後、以下のダイアログが起動しますので、種類と数値を指定し、ボタンをクリックすると計算結果が下部に表示されます。
[ソースコード]
import sympy
# GUIアプリケーションモジュールのインポート
from tkinter import messagebox
import tkinter as tk
# 入力ボックスの幅を指定
inputwidth = 15
# 方程式の次元を指定(メインウィンドウ)
root = tk.Tk()
root.title('約数・素数一覧・素因数分解')
root.geometry(str(inputwidth*4+200) + 'x150')
# 表示形態を指定(ラジオボタンの状態)
kindsform = tk.StringVar()
# 約数・素数一覧・素因数分解計算
def calculation():
# 入力チェック・フォームから値取得
kinds = kindsform.get() # 種類を指定
if valueform.get() == '':
messagebox.showerror('エラー', '数値が入力されていません')
elif not valueform.get().isdecimal(): # 10進数の正の数字かどうか判定
messagebox.showerror('エラー', '数値は正の整数で入力してください')
else:
value = int(valueform.get()) # 値を指定
if value == 0:
messagebox.showerror('エラー', '数値は正の整数で入力してください')
else:
root.destroy()
if kinds == 'divisor': # 約数
print(str(value) + ' の約数:')
print(sympy.divisors(int(value)))
elif kinds == 'primenumber': # 素数一覧
print('1 ~ ' + str(value) + ' の素数一覧:')
print(list( sympy.primerange(1, int(value)) ))
elif kinds == 'primefactor': # 素因数分解
ans = ''
mydict = sympy.factorint(int(value))
ans = str(value) + ' = '
# 辞書リストからすべてのキーと値を取り出し、答の式に変換する
for mykey, myvalue in mydict.items():
ans = ans + str(mykey) + "^" + str(myvalue) + ' * '
# 末尾の特定文字列を削除
print(ans.removesuffix(' * '))
# 種類・値を指定するフォーム(メインウィンドウ)
divisor = tk.Radiobutton(root, variable = kindsform, text = ' 約数 ', value = 'divisor')
divisor.grid(row = 0, column = 0, columnspan = 2)
primenumber = tk.Radiobutton(root, variable = kindsform, text = ' 素数一覧 ', value = 'primenumber')
primenumber.grid(row = 1, column = 0, columnspan = 2)
primefactor = tk.Radiobutton(root, variable = kindsform, text = ' 素因数分解 ', value = 'primefactor')
primefactor.grid(row = 2, column = 0, columnspan = 2)
kindsform.set('divisor')
valuelabel = tk.Label(root, text = '正の整数を入力してください:')
valuelabel.grid(row = 3, column = 0)
valueform = tk.Entry(root, width = inputwidth)
valueform.grid(row = 3, column = 1)
blank1 = tk.Label(root, text = '')
blank1.grid(row = 4, column = 0, columnspan = 2)
button = tk.Button(root, text = '計算', command = calculation)
button.grid(row = 5, column = 0, columnspan = 2)
root.mainloop()