Check if any large number is divisible by 17 or not
Given a number, the task is to quickly check if the number is divisible by 17 or not.
Input : x = 34 Output : Yes Input : x = 47 Output : No
A solution to the problem is to extract the last digit and subtract 5 times of the last digit from the remaining number and repeat this process until a two-digit number is obtained. If the obtained two-digit number is divisible by 17, then the given number is divisible by 17.
- Extract the last digit of the number/truncated number every time
- Subtract 5*(last digit of the previous number) from the truncated number
- Repeat the above three steps as long as necessary.
3978-->397-5*8=357-->35-5*7=0. So 3978 is divisible by 17.
Mathematical Proof :
Let be any number such that =100a+10b+c .
Now assume that is divisible by 17. Then
0 (mod 17)
100a+10b+c0 (mod 17)
10(10a+b)+c0 (mod 17)
10+c0 (mod 17)
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 17.
It can be observed that the smallest n which satisfies this property is -5 as -501 mod 17.
Now we can multiply the original equation 10+c0 (mod 17)
by -5 and simplify it:
-50-5c0 (mod 17)
-5c0 (mod 17)
We have found out that if 0 (mod 17) then,
-5c0 (mod 17).
In other words, to check if a 3-digit number is divisible by 17,
we can just remove the last digit, multiply it by 5,
and then subtract it from the rest of the two digits.
Time Complexity: O(log10n), time required to check if number is divisible by 17
Auxiliary Space: O(1), as no extra space is required
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.