项目Euler 63

时间:2016-12-30 13:51:02

标签: python

5位数字,16807 = 75,也是第五种力量。同样,9位数字134217728 = 89,是第九种力量。

存在多少个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

点票中缺少哪些号码?

1 个答案:

答案 0 :(得分:0)

for power in range(1,10):更改为for power in range(1,22):

你将拥有它们。你对基数有正确的思考,如果以10为基数,n次方将永远不会是n位数。但这对于&#39; n&#39;而言并不正确。数。例如,9 ^ 21是21位数。

我也给了你问题的答案:&#34;哪个号码丢失了?&#34;但项目欧拉也是一个数学挑战,这对学习数学很有帮助。所以你应该找到一种比我给你的暴力更聪明的方法。 1 to 22之所以有效,是因为我们已经知道他们只有49个答案而且我已经强制要求获得第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,也可以删除&#34;降低&#34; var,因为你休息了。

相关问题