In this article, you’ll learn how to write a Shell Script to check a number is Evil Number or not. Before that we will explore what is Evil Number.
What is an Evil number ?
Evil number is a non negative number that has even number of 1 in its binary representation. E.g. Binary representation of 5 is 101 . It has two 1 in binary form. So it is an evil number.
Non evil numbers are called Odious number.
Input : 3 Output : Evil Number Explanation: Binary expansion of 3 is 11, the number of 1s in this is 2 i.e even. Input : 16 Output : Odious Number(not an evil number) Explanation: Binary expansion of 16 = 10000, having number of 1s =1 i.e odd. Input : 23 Output : Evil Number Explanation: Binary expansion of 23 is 10111, the number of 1s in this is 4 i.e even.
Shell Script to check a number is Evil Number or not
#!/bin/bash
# Function to count the number of set bits (1s) in a binary representation
countSetBits() {
local number=$1
local count=0
# Convert the number to binary
local binary=$(echo "obase=2; $number" | bc)
# Count the number of set bits
for (( i = 0; i < ${#binary}; i++ )); do
if [[ ${binary:i:1} == "1" ]]; then
((count++))
fi
done
echo "$count"
}
# Read the input number from the user
read -p "Enter a number: " input
# Calculate the count of set bits
setBits=$(countSetBits $input)
# Check if the number of set bits is even or odd
if (( setBits % 2 == 0 )); then
echo "$input is an Evil Number"
else
echo "$input is not an Evil Number"
fi
Explanation:
- The script begins with the shebang (
#!/bin/bash
) to specify the interpreter to be used (in this case, Bash). - The
countSetBits
function takes a number as input and counts the number of set bits (1s) in its binary representation. It uses thebc
command-line calculator to convert the number to binary. - In the main part of the script, the user is prompted to enter a number using the
read
command. - The
countSetBits
function is called with the input number, and the result is stored in thesetBits
variable. - The script then checks if the count of set bits (
setBits
) is even or odd using an if-else statement. If the count is even, the number is considered an Evil Number; otherwise, it is not. - Finally, the script outputs the result to the user.
To use the script, save it to a file (e.g., evil_number.sh
), make it executable (chmod +x evil_number.sh
), and run it (./evil_number.sh
).
Note: In this script, we assume that the input number is a positive integer. Additional input validation can be added if necessary.
An Evil Number is a positive integer that has an even number of set bits (1s) in its binary representation. The script calculates the count of set bits using a function and determines if the count is even or odd to identify Evil Numbers.