Check if any large number is divisible by 19 or not
Given a number, the task is to quickly check if the number is divisible by 19 or not.
Input : x = 38 Output : Yes Input : x = 47 Output : No
A solution to the problem is to extract the last digit and add 2 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 19, then the given number is divisible by 19.
- Extract the last digit of the number/truncated number every time
- Add 2*(last digit of the previous number) to the truncated number
- Repeat the above three steps as long as necessary.
101156-->10115+2*6 = 10127-->1012+2*7=1026-->102+2*6=114 and 114=6*19, So 101156 is divisible by 19.
Mathematical Proof :
Let be any number such that =100a+10b+c .
Now assume that is divisible by 19. Then
0 (mod 19)
100a+10b+c0 (mod 19)
10(10a+b)+c0 (mod 19)
10+c0 (mod 19)
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 19.
It can be observed that the smallest n which satisfies this property is 2 as 201 mod 19.
Now we can multiply the original equation 10+c0 (mod 19)
by 2 and simplify it:
20+2c0 (mod 19)
+2c0 (mod 19)
We have found out that if 0 (mod 19) then,
+2c0 (mod 19).
In other words, to check if a 3-digit number is divisible by 19,
we can just remove the last digit, multiply it by 2,
and then add to the rest of the two digits.
# Python 3 Program to check # if the number is divisible # by 19 or not # Function to check if the number # is divisible by 19 or not def isDivisible(n) : while (n // 100) : # Extracting the last digit d = n % 10 # Truncating the number n //= 10 # Adding twice the last digit # to the remaining number n += d * 2 # return true if number # is divisible by 19 return (n % 19 == 0) # Driver Code if __name__ == "__main__" : n = 101156 if (isDivisible(n)) : print("Yes" ) else : print("No") # This code is contributed # by ANKITRAI1
Time Complexity: O(log10n), time required to check if number is divisible by 19
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 % 19 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.