给定一个数字,任务是快速检查该数字是否可被19整除。
例子:
Input : x = 38
Output : Yes
Input : x = 47
Output : No
解决该问题的方法是提取最后一位数字,并将最后一位数字的2倍加到剩余数字上,然后重复此过程,直到获得两位数字为止。如果获得的两位数可以被19整除,则给定的数字可以被19整除。
方法:
- 每次提取数字/截断数字的最后一位
- 将2 *(前一个数字的最后一位数字)添加到截断后的数字中
- 视需要重复上述三个步骤。
插图:
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.
C++
// CPP Program to validate the above logic
#include
using namespace std;
// Function to check if the number
// is divisible by 19 or not
bool isDivisible(long long int n)
{
while (n / 100) //
{
// Extracting the last digit
int 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
int main()
{
long long int n = 101156;
if (isDivisible(n))
cout << "Yes" << endl;
else
cout << "No" << endl;
return 0;
}
Java
// Java Program to validate the above logic
import java.io.*;
class GFG {
// Function to check if the
// number is divisible by 19 or not
static boolean isDivisible(long n)
{
while (n / 100>0)
{
// Extracting the last digit
long d = n % 10;
// Truncating the number
n /= 10;
// Subtracting the five times the
// last digit from the remaining number
n += d * 2;
}
// Return n is divisible by 19
return (n % 19 == 0);
}
// Driver code
public static void main (String[] args) {
long n = 101156;
if (isDivisible(n))
System.out.println( "Yes");
else
System.out.println( "No");
}
}
// This code is contributed by Raj.
Python 3 # 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
C#
// C# Program to validate the
// above logic
using System;
class GFG
{
// Function to check if the
// number is divisible by 19 or not
static bool isDivisible(long n)
{
while (n / 100 > 0)
{
// Extracting the last digit
long d = n % 10;
// Truncating the number
n /= 10;
// Subtracting the five times
// the last digit from the
// remaining number
n += d * 2;
}
// Return n is divisible by 19
return (n % 19 == 0);
}
// Driver code
public static void Main()
{
long n = 101156;
if (isDivisible(n))
Console.WriteLine( "Yes");
else
Console.WriteLine( "No");
}
}
// This code is contributed by ajit
PHP
Javascript
Yes
请注意,上面的程序可能没有多大意义,就像可以简单地执行n%19来检查可除性。该程序的目的是验证该概念。另外,如果输入数字很大并指定为字符串,则这可能是一种有效的方法。