Python 練習例14
問題:正の整数を素因数分解します。例:90を入力すると、90=2*3*3*5と出力します。
プログラム分析:nを素因数分解するには、まず最小の素数kを見つけ、次の手順で行います:
(1) この素数がnにちょうど等しい場合、素因数分解のプロセスが終了したことになるので、それを出力します。
(2) n<>k であり、かつ n が k で割り切れる場合は、k の値を出力し、n を k で割った商を新しい正の整数 n として、最初のステップを繰り返します。
(3) n が k で割り切れない場合は、k+1 を新しい k の値として、最初のステップを繰り返します。
プログラムソースコード:
例(Python 2.0+)
#!/usr/bin/python
# -*- coding: UTF-8 -*-
def reduceNum(n):
print '{} = '.format(n),
if not isinstance(n, int) or n <= 0 :
print '正しい数字を入力してください!'
exit(0)
elif n in [1] :
print '{}'.format(n)
while n not in [1] : # ループが再帰を保証する
for index in xrange(2, n + 1) :
if n % index == 0:
n /= index # n は n/index に等しい
if n == 1:
print index
else : # index は必ず素数
print '{} *'.format(index),
break
reduceNum(90)
reduceNum(100)
例(Python 3.0+)
#!/usr/bin/python3
def reduceNum(n):
print ('{} = '.format(n), end=" ")
if not isinstance(n, int) or n <= 0 :
print ('正しい数字を入力してください!')
exit(0)
elif n in [1] :
print ('{}'.format(n))
while n not in [1] : # ループが再帰を保証する
for index in range(2, n + 1) :
if n % index == 0:
n //= index # n は n//index に等しい
if n == 1:
print (index )
else : # index は必ず素数
print ('{} *'.format(index), end=" ")
break
reduceNum(90)
reduceNum(100)
上記の例の出力結果は次のとおりです:
90 = 2 * 3 * 3 * 5 100 = 2 * 2 * 5 * 5その他の拡張