Check if a number is divisible by 23 or not
Given a number, the task is to quickly check if the number is divisible by 23 or not.
Input : x = 46 Output : Yes Input : 47 Output : No
A solution to the problem is to extract the last digit and add 7 times of last digit to remaining number and repeat this process until a two digit number is obtained. If the obtained two digit number is divisible by 23, then the given number is divisible by 23.
- Extract the last digit of the number/truncated number every time
- Add 7*(last digit of the previous number) to the truncated number
- Repeat the above three steps as long as necessary.
17043-->1704+7*3 = 1725-->172+7*5 = 207 which is 9*23, so 17043 is also divisible by 23.
Mathematical Proof :
Let be any number such that =100a+10b+c .
Now assume that is divisible by 23. Then
0 (mod 23)
100a+10b+c0 (mod 23)
10(10a+b)+c0 (mod 23)
10+c0 (mod 23)
Now that we have separated the last digit from the number, we have to find a way to use it.
Make the coefficient of 1.
In other words, we have to find an integer such that n such that 10n1 mod 23.
It can be observed that the smallest n which satisfies this property is 7 as 701 mod 23.
Now we can multiply the original equation 10+c0 (mod 23)
by 7 and simplify it:
70+7c0 (mod 23)
+7c0 (mod 23)
We have found out that if 0 (mod 23) then,
+7c0 (mod 23).
In other words, to check if a 3-digit number is divisible by 23,
we can just remove the last digit, multiply it by 7,
and then subtract it from the rest of the two digits.
Time Complexity: O(log10N)
Auxiliary Space: O(1)
Note that the above program may not make a lot of sense as could simply do n % 23 to check for divisibility. The idea of this program is to validate the concept. Also, this might be an efficient approach if input number is large and given as string.