Top.Mail.Ru
Ответы

Решение задач в Python

Помогите с такой задачей.

Вася получил тройку по алгебре. Алиса над ним подшучивает и придумывает ему сложные задачи. Например, найти все такие числа n от 1 до 10 в 10 степени, для которых количество цифр у n в степени n не больше 55, а затем найти сумму всех таких n.

Выручите Васю, выведите эту сумму.

По дате
По рейтингу
Аватар пользователя
Новичок

Мы превысим 55 цифр задолго до того, как достигнем 10**10. Бессмысленно перебирать все числа диапазона.

12345
 s, n = 0, 1 
while len(str(n ** n)) <= 55: 
  s += n 
  n += 1 
print(s) 


Можно рассчитать, что максимальное n будет равно всего лишь 35.
Например, методом простых итераций по формуле x = 55 / lg(x):

1234
 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 итераций цикла.

Аватар пользователя
Профи
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, который решает эту задачу:

123456
 sum = 0 
for n in range(1, 10**10): 
  power = n**n 
  if len(str(power)) <= 55: 
    sum += n 
print(sum)  

Этот код находит сумму чисел n, удовлетворяющих условию, равную 759253956756834. Ответ: 759253956756834.