#include <cstdio>
#include <cassert>
unsigned foo(unsigned a, unsigned b, unsigned c, unsigned d)
{
assert(c < d);
if (a > b) return foo(b, a, c, d);
unsigned count = 0;
for (a = c + (a + d - 1) / (d * d); a <= b; a += d, count++)
printf(" %u \n", a);
return count;
}
/* Даны целые неотрицательные числа a, b, c, d, при этом 0≤c<d.
Выведите в порядке возрастания все числа от a до b, которые дают остаток c при делении на d.
В этой задаче нельзя использовать инструкцию if, должен быть только один цикл. */
int main()
{
printf("\n Всего найдено: %u\n", foo(2, 2, 1, 2));
return 0;
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGNhc3NlcnQ+CiAKdW5zaWduZWQgZm9vKHVuc2lnbmVkIGEsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGMsIHVuc2lnbmVkIGQpCnsKICBhc3NlcnQoYyA8IGQpOwogIGlmIChhID4gYikgcmV0dXJuIGZvbyhiLCBhLCBjLCBkKTsKICB1bnNpZ25lZCBjb3VudCA9IDA7CiAgZm9yIChhID0gYyArIChhICsgZCAtIDEpIC8gKGQgKiBkKTsgYSA8PSBiOyBhICs9IGQsIGNvdW50KyspCiAgICBwcmludGYoIiAldSBcbiIsIGEpOwogIHJldHVybiBjb3VudDsKfQogCi8qINCU0LDQvdGLINGG0LXQu9GL0LUg0L3QtdC+0YLRgNC40YbQsNGC0LXQu9GM0L3Ri9C1INGH0LjRgdC70LAgYSwgYiwgYywgZCwg0L/RgNC4INGN0YLQvtC8IDDiiaRjPGQuIAogINCS0YvQstC10LTQuNGC0LUg0LIg0L/QvtGA0Y/QtNC60LUg0LLQvtC30YDQsNGB0YLQsNC90LjRjyDQstGB0LUg0YfQuNGB0LvQsCDQvtGCIGEg0LTQviBiLCDQutC+0YLQvtGA0YvQtSDQtNCw0Y7RgiDQvtGB0YLQsNGC0L7QuiBjINC/0YDQuCDQtNC10LvQtdC90LjQuCDQvdCwIGQuCiAg0JIg0Y3RgtC+0Lkg0LfQsNC00LDRh9C1INC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LjQvdGB0YLRgNGD0LrRhtC40Y4gaWYsINC00L7Qu9C20LXQvSDQsdGL0YLRjCDRgtC+0LvRjNC60L4g0L7QtNC40L0g0YbQuNC60LsuICAqLwogCmludCBtYWluKCkKewogIHByaW50ZigiXG4g0JLRgdC10LPQviDQvdCw0LnQtNC10L3QvjogJXVcbiIsIGZvbygyLCAyLCAxLCAyKSk7CiAgcmV0dXJuIDA7Cn0=