• Авторизация


Проверка нечетности числа с помощью арифметики 23-07-2008 22:44 к комментариям - к полной версии - понравилось!


У меня возник вопрос, как проверить, четное число или нет, только с помощью математических операций +, -, *, /, причем без использования циклов, буквально за пару действий на компьютере с ограниченной разрядностью.

Долго бился над решением и все таки его нашел.

Допустим, мы проверяем число Х.
Берем С = (3 * Х + 3) / 2. Если С делится на 3, тогда число нечетное, если не делится, тогда четное.

Например:
для 5, С = 9 делится на 3, нечетное
для 6, С = 8.5 не делится на 3, четное
для 7, К = 12, делится на 3, нечетное
для 8, К = 13.5, не делится на 3, четное
для 9, К = 15, делится на 3, нечетное
для 10, К = 16.5, не делится на 3, четное

А как проверить, делится ли число на 3? Учитывая, что разрядность компьютера ограничена, мы сначала делим Х на 3, а затем умножаем на 3, получаем К. Если К = Х, то число делится на 3, иначе не делится.

Вот все, вопрос решен.
Интересно, он когда-нибудь раньше поднимался или нет?
http://www.forum.mista.ru/topic.php?id=351998

LI 7.05.22 beta
вверх^ к полной версии понравилось! в evernote
Комментарии (15):
24-07-2008-02:04 удалить
<Учитывая, что разрядность компьютера ограничена>
Если хранящая переменная строго типизирована. Мы с тобой уже рассматривали разрядности переменных 1С 8.0, не хранящихся в базе.
<для 8, К = 13.5, не делится на 3, четное > справедливо только для бесконечной периодической дроби.
Не канает, ибо
13,5/3=4,5
4,5*3=13,5
1С округлит, и скажет - равны, а Дельфи- нет :-)
Мурэйкер 24-07-2008-02:12 удалить
Насчёт проверки чётности... Не проще ли проверять - делится ли число на 2?
fixin 24-07-2008-09:52 удалить
Исходное сообщение Мурэйкер: Насчёт проверки чётности... Не проще ли проверять - делится ли число на 2?


КАК?

LI 7.05.22 beta
fixin 24-07-2008-09:53 удалить
Исходное сообщение Hadgehogs: <Учитывая, что разрядность компьютера ограничена>

Если хранящая переменная строго типизирована. Мы с тобой уже рассматривали разрядности переменных 1С 8.0, не хранящихся в базе.

<для 8, К = 13.5, не делится на 3, четное > справедливо только для бесконечной периодической дроби.

Не канает, ибо

13,5/3=4,5

4,5*3=13,5

1С округлит, и скажет - равны, а Дельфи- нет :-)


Я уже знаю, что метод ошибочный

LI 7.05.22 beta
24-07-2008-12:57 удалить
Исходное сообщение fixinКАК?
А как ты проверяешь что на 3 делится? Также и на 2.
fixin 24-07-2008-15:19 удалить
Исходное сообщение Мурэйкер: если (x/2) = ЦЕЛОЕ(х/2)


Не все так просто, кури ветку.
В колонках играет: A может быть варона {a mozhet bit varona}

LI 7.05.22 beta
fixin 24-07-2008-15:19 удалить
Исходное сообщение DKA:
Исходное сообщение fixinКАК?
А как ты проверяешь что на 3 делится? Также и на 2.


На 2 не получится. При делении на 3 получается периодическая дробь, а при делении на 2 - нет...
В колонках играет: A может быть варона {a mozhet bit varona}

LI 7.05.22 beta
28-07-2008-22:10 удалить
А как проверить, делится ли число на 3? Учитывая, что разрядность компьютера ограничена, мы сначала делим Х на 3, а затем умножаем на 3, получаем К. Если К = Х, то число делится на 3, иначе не делится.


А как проверить, делится ли число на 2? Учитывая, что разрядность компьютера ограничена, мы сначала делим Х на 2, а затем умножаем на 2, получаем К. Если К = Х, то число делится на 2, иначе не делится.

И стоило огород городить?
fixin 29-07-2008-09:11 удалить
Исходное сообщение snakeye:
А как проверить, делится ли число на 3? Учитывая, что разрядность компьютера ограничена, мы сначала делим Х на 3, а затем умножаем на 3, получаем К. Если К = Х, то число делится на 3, иначе не делится.




А как проверить, делится ли число на 2? Учитывая, что разрядность компьютера ограничена, мы сначала делим Х на 2, а затем умножаем на 2, получаем К. Если К = Х, то число делится на 2, иначе не делится.



И стоило огород городить?


На конкретном примере плиз, тогда увидишь, что ты тупишь.

LI 7.05.22 beta
29-07-2008-10:58 удалить
Гым, пожалста. Если переменные целые (а понятие чётности применимо только к целым числам), то
4 / 2 = 2; 2 * 2 = 4; 4 = 4
5 / 2 = 2; 2 * 2 = 4; 5 != 5
Ещё, как вариант, можно проверить остаток от деления на два:
4 % 2 = 0;
5 % 2 = 1;
Ещё, в совсем отмороженном случае, можно просто последний бит проверить
4 & 1 = 0;
5 & 1 = 1;
fixin 29-07-2008-13:47 удалить
Исходное сообщение snakeye: Гым, пожалста. Если переменные целые (а понятие чётности применимо только к целым числам), то

4 / 2 = 2; 2 * 2 = 4; 4 = 4

5 / 2 = 2; 2 * 2 = 4; 5 != 5

Ещё, как вариант, можно проверить остаток от деления на два:

4 % 2 = 0;

5 % 2 = 1;

Ещё, в совсем отмороженном случае, можно просто последний бит проверить

4 & 1 = 0;

5 & 1 = 1;


Операции взятия целой части и остатка в условиях задачи запрещены, кури внимательнее...
В колонках играет: 08 HARE KRISHNA MAHA-MANTRA.mp3 {HARE KRISHNA MAHA-MANTRA}

LI 7.05.22 beta
fixin 29-07-2008-13:48 удалить
Исходное сообщение snakeye: Гым, пожалста. Если переменные целые (а понятие чётности применимо только к целым числам), то

4 / 2 = 2; 2 * 2 = 4; 4 = 4

5 / 2 = 2; 2 * 2 = 4; 5 != 5

Ещё, как вариант, можно проверить остаток от деления на два:

4 % 2 = 0;

5 % 2 = 1;

Ещё, в совсем отмороженном случае, можно просто последний бит проверить

4 & 1 = 0;

5 & 1 = 1;


Взятие последнего бита и сдвиги тоже запрещены...
В колонках играет: 08 HARE KRISHNA MAHA-MANTRA.mp3 {HARE KRISHNA MAHA-MANTRA}

LI 7.05.22 beta
29-07-2008-15:07 удалить
Тогда первый вариант. Можно ещё в цикле двойку вычитать, пока результат больше двух. Это дольше, но тогда даже деление с умножением не нужны.
fixin 30-07-2008-09:37 удалить
Исходное сообщение snakeye: Тогда первый вариант. Можно ещё в цикле двойку вычитать, пока результат больше двух. Это дольше, но тогда даже деление с умножением не нужны.


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

LI 7.05.22 beta


Комментарии (15): вверх^

Вы сейчас не можете прокомментировать это сообщение.

Дневник Проверка нечетности числа с помощью арифметики | fixin - Дневник fixin | Лента друзей fixin / Полная версия Добавить в друзья Страницы: раньше»