一个googol (10 ** 100)是一个巨大的数字:1后面跟着100个0;
100 ** 100几乎是不可想象的大:1后面跟着200个0。它们虽然很大,但是它们的各位数之和却只有1。
考虑形如 a ** b 的数, 其中 a, b < 100,最大的各位和是多少?
ab_digit_sum_max = 0
for a in range(2, 100):
ab = 1
for b in range(1, 100):
ab *= a
ab_str = str(ab)
ab_digit_sum = sum([int(s) for s in ab_str])
if ab_digit_sum_max < ab_digit_sum:
ab_digit_sum_max = ab_digit_sum
print(ab_digit_sum_max)
ab_digit_sum_max = 0
for a in range(99, 1, -1):
ab = a ** 100
# if len(str(ab // a)) < ab_digit_sum_max / 9:
# break
for b in range(99, 0, -1):
ab //= a
ab_str = str(ab)
if len(ab_str) < ab_digit_sum_max / 9:
break
ab_digit_sum = sum([int(s) for s in ab_str])
if ab_digit_sum_max < ab_digit_sum:
ab_digit_sum_max = ab_digit_sum
print(ab_digit_sum_max)