Здравствуйте. Только недавно узнал про целочисленное деление с округлением вверх.

Допустим есть a//b, у которого результат округляется вверх. Это равносильно (a - 1)//(b - 1)
Я не могу понять, почему оно так?

6 ответов

43 просмотра

Может вы имели в виду: (a-1)/b+1 ?

Who- Автор вопроса
ImmortaL
Может вы имели в виду: (a-1)/b+1 ?

Да, я перепутал. Как вы сказали (a - 1) / (b + 1) Вопрос: почему это так?

Who
Да, я перепутал. Как вы сказали (a - 1) / (b + 1) ...

Потому что это, очевидно, не так? a=7, b=2; a/b=3.5, ceil(a/b) = 4, (a-1)/(b+1) = 2. И ни одно из (a[+-]1)/(b[+-]1) — не так. Единственная правильная формула — floor((a+b-1)/b), оно же (a+b-1)//b.

Who- Автор вопроса
Yuriy
Потому что это, очевидно, не так? a=7, b=2; a/b=3....

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

Who
Ладно, я понял, что это действительно не то. Прост...

Что именно? Почему (a+b-1)//b округляет вверх? Разберите два варианта — a делится на b без остатка и с остатком m (0 < m < b), что должно получатся от округления вверх и от деления (a + b - 1) на b

Who
Да, я перепутал. Как вы сказали (a - 1) / (b + 1) ...

У вас лишние скобки. Единица должна добавляться после деления. (a-1)/b+1 что по сути равносильно (a+b-1)/b Если из второго уравнения вынести "b" за скобки - получим первое. Скорее всего за этой формулой стоит математическая теория, но логика тут очень простая, на самом деле. Эта формуля полезна когда нужно провести целочисельно деление чисел близких к лимитам, так как перевод к числу с плавающей точкой может сожрать несколько порядков.

Похожие вопросы

Обсуждают сегодня

Всем привет Есть достаточно базовая задача: Дан неориентированный граф. Требуется определить, есть ли в нем цикл, и, если есть, вывести его. Входные данные подаются в виде ма...
Αλeksandr
10
Привет всем. Подскажите, как можно данную задачу более менее эффективно решить? В столовой одного известного Завода вот-вот начнётся обед. На обеде есть три гарнира — макарош...
Vitaliy
6
всем привет. У меня есть неупорядоченный массив точек(в моем случае в трёхмерном пространстве). Есть критерий связанности точек: если евклидово расстояние между ними меньше за...
Павлик Ливаткин
31
Доброе утро. Такой вопрос: есть ли какие-то практически полезные меры вычислительной мощности (в смысле computational complexity) для реальных машин, с ограниченными ресурсам...
Yaroslav Schekin
15
Всем привет Пытаюсь решить следующую задачу: https://informatics.msk.ru/mod/statements/view.php?id=6992&chapterid=101#1 Строка S была записана много раз подряд, после чего из ...
Αλeksandr
10
Здравствуйте. Есть задача нужно найти наименшое число P где фактриал P делиться на 10^N. Ограничения 10^9. Знаю что нужно найти такой P в конце как минимум N нулей. Решение с ...
. Azmiddin
20
Друзья, практический вопрос надо счиать скользящую медиану в последовательности по заданному окну (длины N) тупой вариант - взять значения в окне, отсортировать, взять элеме...
Стас Выщепан
17
Должна-ли работать такая стратегия: Мы каждую секунду бросаем монетку - орел или решка. Если орел - покупаем акцию на все деньги, если у нас есть деньги, или продаем все акци...
George Polevoy
13
#pragma once #include <iostream> #include <vector> template <typename T, typename Comp = std::less<T>> class Heap { public: Heap() = default; Heap(const std::vector<T>&...
Степан
1
Как можно сжимать временные ряды в памяти? У меня есть исторические стоимости ценных бумаг. Данные для каждой минуты в истории OHLC (Open, High, Low, Close). Соответственно, O...
George Polevoy
10
Карта сайта