任意の数の約数一覧・素数一覧・素因数分解を計算するプログラムです。

 

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()