2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Среднее кратных чисел
Сообщение19.09.2021, 11:39 
Знакомая решала задачу на Python:
Найти среднее арифметическое чисел из интервала $[a, b]$ кратных данному $c$

Они там проходят циклы, а я вот подумал: как найти результат одной формулой?
Для упрощения будем считать, что $0 \leqslant a \leqslant b, c > 0$.
Хотелось бы найти формулу, использующую только арифметические операции и
целочисленное деление (//).

У меня получилось только так (% - остаток от деления):

Код:
if a % c == 0: 
    first = a 
else: 
    first = (a // c + 1) * c 
   
last = c * (b // c) 

if first > last: 
    print(0) 
else:
    print((first + last) / 2)


Мне кажется, должно получиться убрать условия и свернуть все в формулу...

 
 
 
 Re: Среднее кратных чисел
Сообщение19.09.2021, 14:04 
Если $\left\lfloor\frac{ b}{ c}\right\rfloor-\left\lceil\frac{ a}{ c}\right\rceil+1\ne 0$, то среднее равно $\left(\left\lfloor\frac{ b}{ c}\right\rfloor+\left\lceil\frac{ a}{ c}\right\rceil\right)\frac{ c}{2},$ иначе среднее неопределено.

 
 
 
 Re: Среднее кратных чисел
Сообщение19.09.2021, 15:42 
denny в сообщении #1532076 писал(а):
Хотелось бы найти формулу, использующую только арифметические операции и
целочисленное деление (//).
Наверное, вычисление остатка не объехать. Но можно чуть короче.
Код:
lst = [t for t in range(a, b+1) if t%c == 0]
print(sum(lst) / len(lst))

А, прошу прощения, циклы тоже нельзя!

 
 
 
 Re: Среднее кратных чисел
Сообщение19.09.2021, 18:53 
statistonline в сообщении #1532103 писал(а):
А, прошу прощения, циклы тоже нельзя!

Да, это должно быть решение в формуле

lel0lel в сообщении #1532084 писал(а):
Если $\left\lfloor\frac{ b}{ c}\right\rfloor-\left\lceil\frac{ a}{ c}\right\rceil+1\ne 0$, то среднее равно $\left(\left\lfloor\frac{ b}{ c}\right\rfloor+\left\lceil\frac{ a}{ c}\right\rceil\right)\frac{ c}{2},$ иначе среднее неопределено.

Это очень близко. Если правильно понимаю, для положительных чисел $\left\lfloor\frac{ x}{ y}\right\rfloor \equiv x//y$.
Надо еще обдумать исключения

 
 
 
 Re: Среднее кратных чисел
Сообщение19.09.2021, 19:48 
Замечу ещё раз, что если на интервале кратных числу $c$ чисел нет, то правильный ответ, что среднее неопределенно, неправильно возвращать значение ноль.

 
 
 
 Re: Среднее кратных чисел
Сообщение19.09.2021, 20:23 
lel0lel в сообщении #1532120 писал(а):
Замечу ещё раз, что если на интервале кратных числу $c$ чисел нет, то правильный ответ, что среднее неопределенно, неправильно возвращать значение ноль.

Да, понимаю!

 
 
 
 Re: Среднее кратных чисел
Сообщение19.09.2021, 21:51 
Но есть другой вопрос. Если есть операция "целочисленное деление $x//y$", то $\left\lfloor x/y \right\rfloor$ эквивалентна ей, а вот как выразить $\left\lceil x /y \right\rceil$?

 
 
 
 Re: Среднее кратных чисел
Сообщение19.09.2021, 22:00 
$\left\lceil x /y \right\rceil=\left\lfloor (x+y-1) /y \right\rfloor$ для натуральных.

 
 
 
 Re: Среднее кратных чисел
Сообщение19.09.2021, 22:04 
lel0lel в сообщении #1532084 писал(а):
Если $\left\lfloor\frac{ b}{ c}\right\rfloor-\left\lceil\frac{ a}{ c}\right\rceil+1\ne 0$, то среднее равно $\left(\left\lfloor\frac{ b}{ c}\right\rfloor+\left\lceil\frac{ a}{ c}\right\rceil\right)\frac{ c}{2},$ иначе среднее неопределено.
Не совсем понял один момент: если, например, рассмотреть случай $a=0, b=10, c=17$, то условие выполняется, среднее считает $8,5$, но должно же быть не определено?

 
 
 
 Re: Среднее кратных чисел
Сообщение19.09.2021, 22:10 
Почему неопределенно, ведь ноль кратен 17-ти. Среднее равно нулю, что и даёт формула.

Вообще тут обычная арифметическая последовательность, уж её среднее найти не составляет труда. Честно говоря, задача не вполне олимпиадная.

 
 
 
 Re: Среднее кратных чисел
Сообщение19.09.2021, 22:26 
lel0lel в сообщении #1532133 писал(а):
Почему неопределенно, ведь ноль кратен 17-ти. Среднее равно нулю, что и даёт формула.

Вообще тут обычная арифметическая последовательность, уж её среднее найти не составляет труда. Честно говоря, задача не вполне олимпиадная.

Согласен, вообще сам это придумал ))
Олимпиадность думаю все же есть, если требовать выразить результат только через $// \equiv \left\lfloor\right\rfloor$
Но я уже увидел ваш ответ, и нашел еще один вариант, более громоздкий, правда:
$\left\lceil x \right\rceil = \left\lfloor x \right\rfloor - \left\lfloor \left\lfloor x \right\rfloor - x \right\rfloor$

-- 19.09.2021, 23:33 --

Итак, если сверх арифметических операций использовать только целочисленное деление,
то получаем:
Код:
foo = (a + b - 1) // c
bar = b // c

if foo == bar + 1:
    result = 'Undefined'
else:
    result = (foo + bar) * c / 2

print(result)

 
 
 
 Re: Среднее кратных чисел
Сообщение19.09.2021, 22:35 
Только это для натуральных, если числа вещественные, то используйте ваш вариант.

 
 
 
 Re: Среднее кратных чисел
Сообщение19.09.2021, 22:35 
$\lceil x\rceil=-\lfloor-x\rfloor$. Если правильно помню, то в Питоне a // b совпадает с $\lfloor\dfrac ab\rfloor$ даже при отрицательных $a$ (насчёт отрицательных $b$ совсем не уверен).

 
 
 
 Re: Среднее кратных чисел
Сообщение19.09.2021, 22:43 
kotenok gav в сообщении #1532137 писал(а):
$\lceil x\rceil=-\lfloor-x\rfloor$. Если правильно помню, то в Питоне a // b совпадает с $\lfloor\dfrac ab\rfloor$ даже при отрицательных $a$ (насчёт отрицательных $b$ совсем не уверен).


Да, есть такое. Я подумал об этом. Но дело в том, что действительно, целочисленное деление для натуральных чисел в Питоне и в абсолютном большинстве языков программирования совпадает с $\left\lfloor\right\rfloor$.

А вот с минусами, да еще в дробях уже начинаются чисто особенности языков и диалектов

 
 
 [ Сообщений: 14 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group