Python 練習例14

Python 100例

問題:正の整数を素因数分解します。例: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

Python 100例

その他の拡張