Проверка числа на четность c

Проверка является ли число чётным одна из самых распространённых задач в программировании. Особенно, если учесть, что в C# отсутствует готовая функция для её решения.

К счастью, такую функцию можно легко написать самостоятельно. Существуют два основных способа решения этой задачи.

  • Деление с остатком на 2;
  • Использование побитового «И».

Рассмотрим их более подробно.

Деление с остатком на 2

Если число нечётное, то остаток от его деления на 2 будет больше нуля. Таким образом, для проверки числа на чётность необходимо проверить, равен ли нулю остаток отделения числа на 2.

C#

1 2 3 4 private bool IsEven(int a) { return (a % 2) == 0; }

Здесь всё предельно просто. Если число чётное, то логическое выражение в методе IsEven будет иметь значение «Истина» и сам метод вернёт значение «Истина».

Использование побитового «И»

Этот способ основан на том, что у нечётного числа младший бит, равен 1. Для проверки числа на чётность необходимо выполнить его побитовое умножение (побитовое «И») на 1. Если результат равен нулю, число чётное.

Чётность в теории чисел

— характеристика целого числа, определяющая его способность делиться нацело на два. Если целое число делится на два, оно называется чётным (примеры: 2, 28, —8, 40), если нет — нечётным (примеры: 1,3, 75, —19). Ноль считается чётным числом.

Чётное число — целое число, которое делится на 2 без остатка: …−4,−2,0,2,4,6,8,10…

Например, 4 ─ это чётное число, его можно разделить на 2. Это помогает в сложении.

Нечётное число — целое число, которое не делится на 2 без остатка: …−3,−1,1,3,5,7,9…

Иными словами чётное и нечётное — собственные названия классов вычетов и по модулю 2.

Признак чётности

Если в десятичной форме записи последняя цифра числа делится на два без остатка — число чётное. Если не делится — то нечётное.

Арифметика

Сложение и вычитание

  • чётное ± чётное = чётное
  • чётное ± нечётное = нечётное
  • нечётное ± чётное=нечётное
  • нечётное ± нечётное = чётное

Умножение:

  • чётное × чётное = чётное
  • чётное × нечётное = чётное
  • нечётное × нечётное = нечётное

Деление:

  • чётное / чётное — может быть любым
  • чётное / нечётное = чётное, если целое
  • нечётное / чётное — не может быть целым
  • нечётное / нечётное = нечётное, если целое

История и культура

Понятие чётности чисел известно с глубокой древности, и ему часто придавалось мистическое значение. Так, в древнекитайской мифологии нечётные числа соответствовали Инь, а чётные — Ян.

В разных странах существуют связанные с количеством даримых цветов традиции, например в США, Европе и некоторых восточных странах считается, что чётное количество даримых цветов приносит счастье. В России чётное количество цветов принято приносить лишь на похороны умершим. В случаях, когда в букете много цветов, чётность или нечётность их количества уже не играет такой роли.

Примечания

  1. См., например, статью «Чётные числа» в большой советской энциклопедии.

ar:أعداد فردية و زوجية bg:Четни и нечетни числа ca:Nombre senar cs:Sudá a lichá čísla da:Lige og ulige tal

el:Άρτιοι και περιττοί αριθμοί

eu:Zenbaki bakoiti

he:מספר זוגי hu:Páros és páratlan számok io:Para e ne-para nombri is:Oddatala

Назначение

В данной статье описывается принцип работы логических операторов ISBL: and, or, not, а также рассматривается возможность их использования не только в условиях.
Статья, в первую очередь, направлена на расширение кругозора и позволит лучше понять, как работает интерпретатор ISBL.
Также в статье есть пример нестандартного использования логических операторов — определение четности целого числа.

Принцип работы

Логические операторы and (и), or (или), not (не) в ISBL по сути являются побитовыми. Для наглядности можно провести аналогию с операторами из C-подобных языков:

ISBL C# / C++ / Java / … Описание
and & Побитовое И
or | Побитовое ИЛИ
not ~ Побитовое отрицание

Логические операторы в ISBL, в первую очередь, работают с логическими значениями TRUE и FALSE, которые являются системными константами, значения которых -1 и 0 соответственно. Т.к. мы знаем, что логические операторы производят побитовые вычисления, разложим эти значения на битовые представления:

Константа Значение Битовое представление
TRUE -1 1111…1111
FALSE 0 0000…0000

Данные значения являются инверсиями относительно друг друга, поэтому они отлично работают в битовых операциях и используются в качестве логических значений.
При подстановке какого-либо выражения в условие (if, while, и т.д.) результат этого выражения сравнивается с нулем, если оно равно 0 – выражение ложно, иначе – истинно.

Примечание: из-за этого, если в условии забыть написать сравнение какого-то целого числа (например, if List.IndexOfName(‘name’)), то ошибки не будет, но условие будет отрабатывать неверно.

Применение

Понимание принципов работы этих операторов может расширить возможности математических вычислений (ниже – пример функции определения четности), а также повысить гибкость условий. К тому же, они работают быстро.
При их использовании стоит помнить о нескольких вещах:

  • Использование логических операторов не по прямому назначению снижает понятность кода;
  • Использовать в условиях not над математическими выражениями и числами надо осторожно, т.к. оба выражения «if 3» и «if not 3» дадут истину. Ложь можно получить только как «if not -1»;
  • Целые числа в IS-Builder’е представляются 32 разрядами, и лучше воздержаться от логических операций с числами, не попадающими в диапазон 32х разрядных чисел.

Примеры

Проверка четности

Хорошим примером применимости логических операторов является определение четности целого числа. Предполагается, что это проверка будет оформлена в виде функции, которая возвращает логическое значение.
Выражение «and 1» даст нам последний бит числа, результатом будет являться 1 для нечетных и 0 для четных. Далее их нужно привести к стандартным значениям TRUE и FALSE, сделать это можно вычитанием единицы.

Код функции:

Assert(Round(Value; 0) = Value; «Переданное значение не является целым числом») Result = (Value and 1) — 1

Условие наличия элемента в списке

Простой пример, просто показывающий, что так можно, но такая реализация плохо читается, хотя и может пригодиться в сложных условиях.
Вот 3 идентичных варианта написания условия наличия элемента в списке для использования в if’e:

// Обычный if List.IndexOfName(ValueName) -1 // Какие-то вычисления endif // -1 инвертируется в 0, остальные значения в ненулевое целое число if not List.IndexOfName(ValueName) // Какие-то вычисления endif // Подобно примеру с четностью if List.IndexOfName(ValueName) + 1 // Какие-то вычисления endif

Задача

Василий на бумажке в виде полоски написал число, кратное $d$. Его младший брат Дмитрий разрезал число на $k$ частей. Василий решил восстановить написанное число, но столкнулся с проблемой. Он помнил только число $d$, а чисел, кратных $d$, можно сложить несколько.
Сколько чисел, кратных числу $d$, может составить Василий, если составляя исходное число, он использует все части.

Входные данные

Выходные данные

Количество разных чисел.

Тесты

Код программы

e-olymp 50. The cut number solution C++

Решение задачи

Согласно свойствам остатков от деления, остаток от деления суммы двух натуральных чисел на натуральное число $d$ совпадает с остатком от деления на $d$, который при делении на $d$ дает сумма их остатков. А также остаток от деления произведения двух натуральных чисел на натуральное число $d$ совпадает с остатком от деления на $d$, который при делении на $d$ дает произведение их остатков.
Значит, мы можем решить обычным перебором, но на каждом действии берем остаток от деления на $d$.
Также части чисел могут совпадать, в связи с чем необходима проверка на то, что мы составленное число еще не записывали. Для этого мы будем хешировать полученное число следующим образом: последнюю цифру умножим на $101^0$, предпоследнюю — на $101^1$ и так далее.
Если наш конечный результат делится на $d$ без остатка и если составленное число встречается в первый раз, то увеличиваем счетчик на $1$.

Ссылки

Условие задачи на e-olymp
Код решения

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *