他の回答は、問題の説明の説明を提供しました。正の入力の可能な解決策は次のとおりです。
def find_root_power(n, minpower, maxpower):
for pwr in range(minpower, maxpower + 1): # minpower <= pwr <= maxpower
# find root such that root**pwr == n
f = n ** (1. / pwr) # float
root = int(f + 0.5) # int (per problem statement)
if root**pwr == n:
yield root, pwr # multiple solutions are possible
n = int(raw_input("Input a number:"))
for root, pwr in find_root_power(n, minpower=1, maxpower=5):
print("root: %d pwr: %d" % (root, pwr))
たとえば、ユーザー入力が81
; 出力は次のとおりです。
root: 81 pwr: 1
root: 9 pwr: 2
root: 3 pwr: 4
注:が整数の場合root=n
、pwr=1
は常に解です。n
ユーザー入力が整数でない場合、コードが発生しますValueError
(問題の説明を考えるroot**pwr
と、整数のみである可能性があるため、整数以外の入力に対する解決策は存在しません)。
注: if root ** pwr == n
then(-root) ** pwr == n
の場合もpwr
. 以下を追加できます。
if root**pwr == n:
yield root, pwr # multiple solutions are possible
if pwr % 2 == 0: # even
yield -root, pwr
ソリューションとして負のルートを含める。