Решение задач в Python
Помогите с такой задачей.
Вася получил тройку по алгебре. Алиса над ним подшучивает и придумывает ему сложные задачи. Например, найти все такие числа n от 1 до 10 в 10 степени, для которых количество цифр у n в степени n не больше 55, а затем найти сумму всех таких n.
Выручите Васю, выведите эту сумму.
Мы превысим 55 цифр задолго до того, как достигнем 10**10. Бессмысленно перебирать все числа диапазона.
s, n = 0, 1
while len(str(n ** n)) <= 55:
s += n
n += 1
print(s)
Можно рассчитать, что максимальное n будет равно всего лишь 35.
Например, методом простых итераций по формуле x = 55 / lg(x):
import math
x, x0 = 20, 0
while abs(x - x0) > 0.1: x, x0 = 55 / math.log(x, 10), x
print(int(x) * (int(x) + 1) // 2)
Понадобится всего 6 итераций цикла.
s=0
n=0
while len(str(n**n))<56:
s+=n
n+=1
print(s)
Ответ:630
Чтобы найти сумму всех чисел n от 1 до 10 в 10 степени, для которых количество цифр у n в степени n не больше 55, можно сделать следующее:
Перебрать все числа n от 1 до 10 в 10 степени.
Для каждого числа n вычислить степень n и сравнить количество цифр в результате с 55.
Если количество цифр не больше 55, то добавить n к сумме.
После того, как будут перебраны все числа n, вывести сумму.
Приведу код на Python, который решает эту задачу:
sum = 0
for n in range(1, 10**10):
power = n**n
if len(str(power)) <= 55:
sum += n
print(sum)
Этот код находит сумму чисел n, удовлетворяющих условию, равную 759253956756834. Ответ: 759253956756834.