我正在尝试编写一个 Python 脚本来查找所有整数 (N),其中 N 的数字之和的某个幂等于 N。例如,N=81 符合条件,因为 8 + 1 = 9,并且9(即 2)的一定幂 = 81。
我选择的范围是任意的。我的脚本有效,但非常非常慢。理想情况下,我想在大约 6000 毫秒内找到前 30 个这样的整数。
我的第一个解决方案:
def powerOfSum1():
listOfN = []
arange = [a for a in range(11, 1000000)] #range of potential Ns
prange = [a for a in range(2, 6)] # a range for the powers to calculate
for num in arange:
sumOfDigits = sum(map(int, str(num)))
powersOfSum = [sumOfDigits**p for p in prange]
if num in powersOfSum:
listOfN.append(num)
return listOfN
在我的第二个解决方案中,我尝试存储每个 sumOfDigits 的所有幂,但这并没有显着提高性能。
def powerOfSum2():
listOfN = []
powers= {}
for num in range(11, 1000000):
sumOfDigits = sum(map(int, str(num)))
summ = str(sumOfDigits)
if summ in powers:
if num in powers[summ]:
listOfN.append(num)
else:
powersOfSum = [sumOfDigits**p for p in range(2,6)]
powers[summ] = powersOfSum
if num in powers[summ]:
listOfN.append(num)
return listOfN
我还没有研究过数据结构和算法,所以我很感激任何关于使这个脚本更高效的指针。