Модуль: 7.2 Цикл for: функция range


23. Остатки

☰ Теория

Нам нужно найти первое число ≥ a, которое при делении на d даёт остаток c.

Когда мы делим a на d, получаем какой-то остаток:

r = a % d

Например: если a = 14, d = 5, то r = 4, потому что 14 = 2·5 + 4.

Но нам нужен остаток c, а не r.

нужно «подвинуть» a на число k, чтобы остаток стал c:
(a + k) % d == c
Это то же самое, что: 
(r + k) % d == c
Нужно найти k.
k = (c - r) % d
Например:  r = 4, c = 1, d = 5 → c - r = -3, но -3 % 5 = 2, потому что 4 + 2 = 6 → 6 % 5 = 1 — то, что нужно!
Но у нас первое число это a:
start = a + k = a + (c - a % d) % d
     
 

Даны целые неотрицательные числа 𝑎, 𝑏, 𝑐, 𝑑, при этом 0⩽𝑐<𝑑. Выведите в порядке возрастания все числа от 𝑎 до 𝑏 включительно, которые дают остаток 𝑐 при делении на 𝑑.

В этой задаче нельзя использовать инструкцию if, операторы сравнения (< и т. д.), должен быть только один цикл.

Входные данные
На вход подаются четыре строки, в каждой из которых написано по одному неотрицательному целому числу — 𝑎, 𝑏, 𝑐, 𝑑. Все числа не превосходят 2⋅109, 0⩽𝑐<𝑑.

Выходные данные
Выведите ответ на задачу.
Примеры
Входные данныеВыходные данные
1 2
5
0
2
2 4
2 5
5
0
5
5

Напишите программу
Auto
       

time 1000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
Python24
Комментарий учителя