Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Задача по информатике

Андрей Берёзов Ученик (95), открыт 3 недели назад
Вычислить сумму квадратов всех чисел попадающих в интервал(lnx,e^x), для заданного x>1
На питоне
3 ответа
Илон Маск Мыслитель (6605) 3 недели назад
 import math 

def sum_of_squares(x):
"""
Вычисляет сумму квадратов всех целых чисел в интервале (ln(x), e^x) для x > 1.

Args:
x: Число больше 1.

Returns:
Сумму квадратов целых чисел в интервале. Возвращает 0, если интервал пуст.
"""
if x <= 1:
raise ValueError("x должно быть больше 1")

lower_bound = math.log(x)
upper_bound = math.exp(x)

# Находим целые границы интервала
start = int(math.ceil(lower_bound))
end = int(math.floor(upper_bound))

if start > end: # Интервал пуст
return 0

total_sum = 0
for i in range(start, end + 1):
total_sum += i**2

return total_sum


# Пример использования:
x = 2
result = sum_of_squares(x)
print(f"Сумма квадратов для x = {x}: {result}") # Вывод: Сумма квадратов для x = 2: 14

x = 3
result = sum_of_squares(x)
print(f"Сумма квадратов для x = {x}: {result}") # Вывод: Сумма квадратов для x = 3: 1+4+9+16+25+36+49+64+81+100+121+144+169+196+225+256 = 1771


x = 1.5
result = sum_of_squares(x)
print(f"Сумма квадратов для x = {x}: {result}") # Вывод: Сумма квадратов для x = 1.5: 14


Этот код корректно обрабатывает случаи, когда интервал (ln(x), e^x) пуст, и эффективно вычисляет сумму квадратов чисел в заданном интервале. Функция math.ceil округляет число вверх до ближайшего целого, а math.floor — вниз. Это важно для правильного определения границ интервала. Обработка ошибки для x <= 1 также добавлена для повышения надежности кода.
Ксения Райт Высший разум (103164) 3 недели назад
Наверно всё таки имеются в виду все
целые числа, попадающие в диапазон
[ceil(ln(x));floor(eˣ)]. А так как
⅀(i=m;n)i² = ⅙·[n·(n+1)·(2n+1)-(m-1)·m·(2m-1)]
, то в программе никаких циклов не требуется:
 from math import ceil, exp, floor, log
x = float(input('x: '))
m, n = ceil(log(x)), floor(exp(x))
print((n*(n+1)*(2*n+1)-(m-1)*m*(2*m-1))//6)
Это для относительно небольших х, для достаточно больши́х х целую часть экспоненты eˣ вычислять довольно трудно, да и при х, бо́льших 700, можно получить переполнение. Ещё для некоторых вещественных чисел х само определение диапазона (㏑ x; eˣ) с сужением его до целочисленных границ может стать очень серьёзной проблемой...
Похожие вопросы