2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Простая численная задача, но что за ней?
Сообщение28.12.2022, 14:13 


17/02/15
78
Имеется простая задача

Дано целое число $n$. Выведите следующее за ним четное число.

Решение:
$n=int(input())
print(2(n//2)+2)$

Вопрос: какая наука стоит за этим? Можно быстро догадаться, но почему это работает? Предполагаю, что эта задача является входом в какую-то интересную часть математики (дискретной математики). Получается, что это в этой формуле специальная функция на множестве действительных чисел. Так как все числа с плавающей запятой из интервала [n,n+2) однозначно переходят в одну точку-целое от деления на 2, а потом эта точка скачком попадает в "следующее четное". Что это за функция?

 Профиль  
                  
 
 Re: Простая численная задача, но что за ней?
Сообщение28.12.2022, 14:25 
Заслуженный участник
Аватара пользователя


16/07/14
9143
Цюрих
Для кода есть отдельный тег syntax:
Используется синтаксис Python
n = int(input())
print(2 * (n // 2) + 2)

(предполагаю что вы потеряли звездочку, а не используете странный язык, в котором 2 является функцией)

Не очень понятно, в чем вопрос, и почему вы говорите то о числах с плавающей запятой, то о целых.
Если вопрос, как это работает - то разберите для начала случай четного n, потом нечетного (учтите, что по спецификации (2 * k + 1) // 2 == k).
Если вопрос, как эта функция называется - вряд ли у неё есть общепринятое название, "наименьшее четное число, большее данного" для называния вполне сойдет.

 Профиль  
                  
 
 Re: Простая численная задача, но что за ней?
Сообщение28.12.2022, 14:37 


17/02/15
78
Это скорее математический вопрос. На вход поступает число в плавающей, после того, как взяли целое от деления любого числа (не важно какого) из [n,n+2), оно уже может быть описано единственным целым K, и следующий переход $2(K+1)$ - дает результат задачи, ближайшее четное.
Почему? Какая теория стоит за этой простой задачей? Тут можно находить аналогии с движением по графам. Имеется возможность числа из бесконечного множества однозначно перегонять в числа с требуемыми свойствами.

Тогда я задам вопрос, а какие еще задачи известны, которые используют похожие алгоритмы?
А также, какая теорема стоит за этой простой формулой?

 Профиль  
                  
 
 Re: Простая численная задача, но что за ней?
Сообщение28.12.2022, 14:44 
Заслуженный участник
Аватара пользователя


16/07/14
9143
Цюрих
Да нет тут ничего глубокого, просто берем максимальное целое число, не превосходящее нашего (округляем вниз). При желании, конечно, можно накрутить умных слов, что множество целых чисел неограничено снизу и полно по Дедекинду (любое его непустое ограниченное сверху подмножество имеет точную верхнюю грань), поэтому функция "максимальное целое число, не превосходящее данного" корректно определена. Но это уже что-то в духе определения единицы по Бурбаки.

 Профиль  
                  
 
 Re: Простая численная задача, но что за ней?
Сообщение28.12.2022, 15:02 


17/02/15
78
Здесь нет округления. И получается не "максимальное целое не превосходящее нашего".

Например, любое из [10,12) переходит в 5, затем в 6, затем в 12. То есть имеется отображение [10,12) в {12} (а в промежутке можно построить еще два отображения из [10,12) в фиксированные 5 и 6, имеющие свои свои свойства, пусть на данном этапе рассмотрения не ясные.)

Любое из [12,14) переходит в 6, затем в 7, затем в 14. То есть имеется отображение [12,14) в {14}.
Любой элемент множества [n,n+2) дает одно значение функции.
Это очень полезное свойство функции. Вот я и спрашиваю, есть еще такие функции с такими свойствами, переводящие любой из множества в фиксированную точку, и как и где они используются?

Есть математика на остатках от деления, а здесь математика на целых от деления! Кто знает, что за область?

 Профиль  
                  
 
 Re: Простая численная задача, но что за ней?
Сообщение28.12.2022, 15:06 


05/09/16
12056
A.M.V. в сообщении #1575323 писал(а):
Дано целое число $n$. Выведите следующее за ним четное число.

Решение:
$n=int(input())
print(2(n//2)+2)$

Вопрос: какая наука стоит за этим? Можно быстро догадаться, но почему это работает? Предполагаю, что эта задача является входом в какую-то интересную часть математики (дискретной математики). Получается, что это в этой формуле специальная функция на множестве действительных чисел.

Почему действительных если дано целое $n$?
Я бы писал так (синтаксис PARI/GP)
Код:
m(n)=n+2-n%2

Это же будет работать и для "Дано целое число $n$. Выведите следующее за ним число, делящееся на k", в таком виде:
Код:
m(n,k)=n+k-n%k

Тут процент означает остаток от деления того что слева на то что справа. (a%b это навроде a mod b). Будет работать и с отрицтельными n, по крайней мере в PARI/GP
А ещё, остаток от деления на 2 это младший бит в двоичной записи числа, можно и так запрограммировать.

 Профиль  
                  
 
 Re: Простая численная задача, но что за ней?
Сообщение28.12.2022, 15:14 
Заслуженный участник
Аватара пользователя


16/07/14
9143
Цюрих
A.M.V. в сообщении #1575330 писал(а):
Здесь нет округления
Есть. Прочитайте, что делает //.
A.M.V. в сообщении #1575330 писал(а):
Любое из [12,14) переходит в 6, затем в 7, затем в 14.
В приведенной вами записи - в 6, потом в 12, потом в 14. Чтобы было в 6, 7 и 14 должно быть 2 * (n // 2 + 1).
A.M.V. в сообщении #1575330 писал(а):
Вот я и спрашиваю, есть еще такие функции с такими свойствами, переводящие любой из множества в фиксированную точку, и как и где они используются?
Да сколько угодно. Берете множество, берете фиксированную точку, и вот вам функция.

 Профиль  
                  
 
 Re: Простая численная задача, но что за ней?
Сообщение28.12.2022, 15:20 


05/09/16
12056
A.M.V. в сообщении #1575330 писал(а):
Вот я и спрашиваю, есть еще такие функции с такими свойствами, переводящие любой из множества в фиксированную точку, и как и где они используются?

Ну есть функция "целая часть" $f(x)=\lfloor x \rfloor$ например... Собсно формула с ней для вашей задачи "следующее за $n$ четное число" будет $f(n)=2\lfloor \frac n2 \rfloor +2$

 Профиль  
                  
 
 Re: Простая численная задача, но что за ней?
Сообщение28.12.2022, 15:23 


17/02/15
78
wrest в сообщении #1575335 писал(а):
A.M.V. в сообщении #1575330 писал(а):
Вот я и спрашиваю, есть еще такие функции с такими свойствами, переводящие любой из множества в фиксированную точку, и как и где они используются?

Ну есть функция "целая часть" $f(x)=\lfloor x \rfloor$ например... Собсно формула с ней для вашей задачи "следующее за $n$ четное число" будет $f(n)=2\lfloor n/2 \rfloor +2$


Да, согласна. А следующие уровни математических надстроек над этой функцией?

 Профиль  
                  
 
 Re: Простая численная задача, но что за ней?
Сообщение28.12.2022, 15:27 


05/09/16
12056
A.M.V. в сообщении #1575336 писал(а):
Да, согласна. А следующие уровни математических надстроек над этой функцией?

"следующее за действительным числом $n$ целое число, делящееся на натуральное число $k$ без остатка" равно значению функции $f(n,k)=k(\lfloor \frac nk \rfloor+1)$
"следующее за" = "наименьшее, большее чем"

 Профиль  
                  
 
 Re: Простая численная задача, но что за ней?
Сообщение28.12.2022, 15:59 


17/02/15
78
wrest в сообщении #1575337 писал(а):
A.M.V. в сообщении #1575336 писал(а):
Да, согласна. А следующие уровни математических надстроек над этой функцией?

"следующее за действительным числом $n$ целое число, делящееся на натуральное число $k$ без остатка" равно значению функции $f(n,k)=k(\lfloor \frac nk \rfloor+1)$
"следующее за" = "наименьшее, большее чем"


Некоторое обобщение, функция двух переменных! Вместо " ближайшего четного" можно решить задачи по нахождению других ближайших кратных.
В какой литературе об этом можно прочесть? Не прямо о том, что уже понятно,и здесь прозвучало, а следующие уровни обобщений. Как это называется, черт возьми? Чтоб гуглить, нужно знать некоторые ключевые слова.

 Профиль  
                  
 
 Re: Простая численная задача, но что за ней?
Сообщение28.12.2022, 16:32 


05/09/16
12056
A.M.V. в сообщении #1575343 писал(а):
В какой литературе об этом можно прочесть? Не прямо о том, что уже понятно,и здесь прозвучало, а следующие уровни обобщений. Как это называется, черт возьми?

Я не понимаю ваш вопрос, извините. Бывают, например "кусочно-заданные" функции, такие как "кусочно-линейные" или "кусочно-постоянные" (но не только они).
Вот кусочно-постоянные перескакивают в конечное/счетное количество значений. Функция "целая часть вещественного числа" $f(x)=\lfloor x \rfloor$ как раз такая -- кусочно-постоянная функция. Функция "модуль вещественного числа" $f(x)=|x|$ -- кусочно-линейная. Или вот такая $f(x)=x\lfloor x \rfloor$ тоже кусочно-линейная.

 Профиль  
                  
 
 Re: Простая численная задача, но что за ней?
Сообщение29.12.2022, 08:27 
Аватара пользователя


28/10/21
100
A.M.V. в сообщении #1575323 писал(а):
Дано целое число $n$. Выведите следующее за ним четное число.

Решение:
$n=int(input())
print(2(n//2)+2)$

Вопрос: какая наука стоит за этим? Можно быстро догадаться, но почему это работает? Предполагаю, что эта задача является входом в какую-то интересную часть математики (дискретной математики).


Решение просто собирается из готовых кусочков.

Например, вариант рассуждений 1:

1. Выровняем наше число вниз на границу, кратную 2
2. Прибавим к нему 2

Шаг 1 (выравнивание вниз) реализуется как
1.1. Разделим наше число на 2 с округлением вниз
1.2. Умножим результат на 2

Целочисленное деление с округлением вниз языки программирования обычно предоставляют сразу "из коробки". В вашем случае это именно //. В результате сразу получаем именно приведенную вами формулу

Используется синтаксис Python
print(n // 2 * 2 + 2)


Вариант рассуждений 2:

1. Увеличим наше число на 1
2. Выровняем его вверх на границу, кратную 2.

Шаг 2 (выравнивание вверх) реализуется как
2.1. Разделим число на 2 с округлением вверх
2.2. Умножим результат на 2

Шаг 2.1 (деление с округлением вверх) реализуется как
2.1.1. Прибавим к числу 1
2.1.2. Разделим число на 2 с округлением вниз

Целочисленное деление с округлением вниз, еще раз, языки программирования обычно предоставляют сразу "из коробки".

Собираем все вместе и получаем

Используется синтаксис Python
print((n + 1 + 1) // 2 * 2)


Несложно показать, что эта формула эквивалентна вашей.

Вариант рассуждений 3:

1. Увеличим наше число на 2
2. Выровняем его вниз на границу, кратную 2.

Это тоже даст нам вариант

Используется синтаксис Python
print((n + 2) // 2 * 2)

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Yustas


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group