2016-12-30 117 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

至于你评论的后半部分,我觉得我只是你建议的一个精心制作的版本。谢谢! –