2016-12-30 171 views
-1

5位數字,16807 = 75,也是第五個功率。同樣,9位數字134217728 = 89是第9位數字。歐拉項目63

存在多少個n位正整數也是第n個功率?

我已經寫以下代碼:

ctr=0 
for power in range(1,10): 
    for base in range (1,10): 
     if len(str(base**power))==power: 
      lower=base 
      break 
    if len(str(9**power))==power: 
     upper=9 
    elif len(str(8**power))==power: 
     upper=8 
    for k in range(lower,upper+1): 
     ctr+=1 
print (ctr) 

但我得到36作爲輸出,而不是49

的邏輯適用於下列分析數據: 1升高到1 < = X升高到1 < = 9升高到1 5上升到3 < = X升高到3 < = 9上升到3 ...等,直到 9升高到9

計數中缺少哪些數字?

+2

嗯,你」重新失去了75^5和89^9,所以你知道你應該考慮更多的基地 –

+0

我認爲它是7 5而不是75 5(75 5比5更多的數字) –

+0

@jaykay你'elif'有什麼用? +如果你的邏輯很好,最後一個循環應該用ctr + = 10-lower代替 –

回答

0

變化for power in range(1,10):for power in range(1,22):

,你就會有他們所有。你對基地有正確的想法,如果你以10爲基數,那麼n次方將永遠不會是n位。但是對於'n'這個數字是不正確的。例如,9^21是21位。

我還給你回答你的問題:「哪些數字缺失?」但歐拉項目也是一個數學挑戰,這對學習數學很有幫助。所以你應該找到比我給你的暴力更聰明的方式。 1 to 22的作品,因爲我們已經知道他們只有49個答案,我bruteforced得到第49。

此外,在註釋中規定:

if len(str(9**power))==power: 
    upper=9 
elif len(str(8**power))==power: 
    upper=8 
for k in range(lower,upper+1): 
    ctr+=1 

應該是:

ctr += 10-lower 

(好吧,就算ctr += 10-base和刪除 「低級」 變種,因爲你打破

+0

這是我錯過了。我必須檢查數學,爲什麼只有1,22範圍給出答案。 –

+0

至於你評論的後半部分,我覺得我只是你建議的一個精心製作的版本。謝謝! –