Почему?
Конечно, min и max сначала надо забить нулями, так как в противном случае программа будет падать при доступе к непонятному a[min] на первой итерации :)
Вынесение случая с одним отрицательным в отдельный случай не имеет смысла :)
Правда, это придется делать достаточно сложно по количеству действий — при проходе по массиву надо:
1) проверить число на равенство нулю
2) проверить на отрицательность
3) найти минимум и максимум среди отрицательных
4) найти минимум среди положительных.
Это — 5*n.
А если не заботиться о переполнении, то можно за один проход найти произведение всех чисел, за второй — найти максимальное p / a[i].
Это весьма неудивительно — проверка числа на простоту длится sqrt(n), значит N чисел проверятся за O(N*sqrt(N)).
В то время как грамотное решето работает O(N), примитивное — как описано в статье, O(Nlog(log(N))). Для миллиона — разница в 1000 раз для грамотного и в 231 — для простого.
А можно ли еще быстрее? :)
Конечно, min и max сначала надо забить нулями, так как в противном случае программа будет падать при доступе к непонятному a[min] на первой итерации :)
А можно сделать еще быстрее?
А отрицательное обработается нормально.
Есть другой вариант:
a = a ^ b;
b = a ^ b;
a = a ^ b;
(^ = xor, искл. или, мин. сумма, сумма по модулю 2, ...)
Дан массив длинны от N. Можно найти в нем минимум и максимум простым способом:
Несложно посчитать, что программа будет производить 2*n сравнений.
Можно ли решить задачу за меньшее число сравнений?
Правда, это придется делать достаточно сложно по количеству действий — при проходе по массиву надо:
1) проверить число на равенство нулю
2) проверить на отрицательность
3) найти минимум и максимум среди отрицательных
4) найти минимум среди положительных.
Это — 5*n.
А если не заботиться о переполнении, то можно за один проход найти произведение всех чисел, за второй — найти максимальное p / a[i].
В то время как грамотное решето работает O(N), примитивное — как описано в статье, O(Nlog(log(N))). Для миллиона — разница в 1000 раз для грамотного и в 231 — для простого.
2. меняем uid с не-0 на 0
3. логинимся
4. ???
5. PROFIT!
У меня — 8 мегабайт :)
Прошу прощения за дезинформацию.
df -i
df -h
Тут лежат все лимиты openVZ, которые могут что-то зарезать.
Но лично я там не был и ничего не видел, да.