From c83dd558212b93e89219f24107a2c23586835fc1 Mon Sep 17 00:00:00 2001 From: SARATHI-78 Date: Mon, 21 Sep 2026 14:56:02 +0530 Subject: [PATCH 1/2] Add evil_number algorithm in maths/special_numbers --- maths/special_numbers/evil_number.py | 67 ++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 maths/special_numbers/evil_number.py diff --git a/maths/special_numbers/evil_number.py b/maths/special_numbers/evil_number.py new file mode 100644 index 000000000000..a4291c0b3d54 --- /dev/null +++ b/maths/special_numbers/evil_number.py @@ -0,0 +1,67 @@ +""" +== Evil Number == +An evil number is a non-negative integer that has an even number of 1s in its +binary expansion. Numbers that are not evil are called odious numbers. + +Examples of evil numbers: 0, 3, 5, 6, 9, 10, 12, 15, 17, 18, 20, 23, 24, 27, ... +Reference: https://en.wikipedia.org/wiki/Evil_number +""" + + +def is_evil_number(number: int) -> bool: + """ + Check if a given number is an evil number. + + A non-negative integer is evil if the sum of its binary digits (its Hamming weight) + is even. + + :param number: A non-negative integer. + :return: True if number is an evil number, False otherwise. + + >>> is_evil_number(0) + True + >>> is_evil_number(3) + True + >>> is_evil_number(5) + True + >>> is_evil_number(6) + True + >>> is_evil_number(9) + True + >>> is_evil_number(1) + False + >>> is_evil_number(2) + False + >>> is_evil_number(4) + False + >>> is_evil_number(7) + False + >>> is_evil_number(8) + False + >>> is_evil_number(-1) + Traceback (most recent call last): + ... + ValueError: Input must be a non-negative integer + >>> is_evil_number(5.5) + Traceback (most recent call last): + ... + TypeError: Input must be an integer + """ + if not isinstance(number, int): + raise TypeError("Input must be an integer") + if number < 0: + raise ValueError("Input must be a non-negative integer") + + count = 0 + temp = number + while temp > 0: + if temp % 2 == 1: + count += 1 + temp = temp // 2 + return count % 2 == 0 + + +if __name__ == "__main__": + import doctest + + doctest.testmod() From c9dcd547de6827a38bea59258d46db7c5492965a Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 21 Sep 2026 09:35:08 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- data_structures/linked_list/remove_nth_node_from_end_of_list.py | 1 - 1 file changed, 1 deletion(-) diff --git a/data_structures/linked_list/remove_nth_node_from_end_of_list.py b/data_structures/linked_list/remove_nth_node_from_end_of_list.py index 7ca0e320d29c..4bb048c7ca1c 100644 --- a/data_structures/linked_list/remove_nth_node_from_end_of_list.py +++ b/data_structures/linked_list/remove_nth_node_from_end_of_list.py @@ -1,6 +1,5 @@ """Learn more about this algorithm: https://www.geeksforgeeks.org/delete-nth-node-from-the-end-of-the-given-linked-list/""" - from __future__ import annotations from dataclasses import dataclass