给定一个大数字,任务是检查数字是否可被13整除。
例子 :
Input : 637
Output : 637 is divisible by 13.
Input : 920
Output : 920 is not divisible by 13.
Input : 83959092724
Output : 83959092724 is divisible by 13.
如果给定的数字num小,则可以通过执行num%13并检查结果是否为0来轻松查找是否可以被13整除。但是,非常大的数字呢?让我们讨论大量。
以下是关于13的可除性的一些有趣事实。
- 如果并且如果从右到左的三个块的交替和(或相加和减去)也可以被13整除,则数字可以被13整除。例如,2911285可以被13整除,因为大小为3的块的交替和为2 – 911 + 285 = -650,可被13整除。
- 当且仅当通过将最后一位数字乘以4所得的数字也可以除以13时,数字才能被13整除。
例如,考虑2353。应用上述规则,我们得到235 + 3 * 4 =247。再次应用规则,得到24 + 7 * 4 =52。由于52可被13整除,所以给定数可被13整除。
以下是上面基于第一个事实的实现(查找大小为3的块的交替总和)
C++
// CPP program to check
// whether a number is
// divisible by 13 or not.
#include
using namespace std;
// Returns true if number
// is divisible by 13 else
// returns false
bool checkDivisibility(string num)
{
int length = num.size();
if (length == 1 && num[0] == '0')
return true;
// Append required 0s .
// at the beginning.
if (length % 3 == 1)
{
// Same as strcat(num, "00");
// in c.
num +="00";
length += 2;
}
else if (length % 3 == 2)
{
// Same as strcat(num, "0");
// in c.
num += "0";
length += 1;
}
// Alternatively add/subtract
// digits in group of three
// to result.
int sum = 0, p = 1;
for (int i = length - 1; i >= 0; i--)
{
// Store group of three
// numbers in group variable.
int group = 0;
group += num[i--] - '0';
group += (num[i--] - '0') * 10;
group += (num[i] - '0') * 100;
sum = sum + group * p;
// Generate alternate series
// of plus and minus
p *= (-1);
}
sum = abs(sum);
return (sum % 13 == 0);
}
// Driver code
int main()
{
string number = "83959092724";
if (checkDivisibility(number))
cout << number << " is divisible by 13.";
else
cout << number << " is not divisibe by 13.";
return 0;
}
Java
// Java program to check
// whether a number is
// divisible by 13 or not.
class GFG
{
// Returns true if number
// is divisible by 13 else
// returns false
static boolean checkDivisibility(String num)
{
int length = num.length();
if (length == 1 &&
num.charAt(0) == '0')
return true;
// Append required 0s .
// at the beginning.
if (length % 3 == 1)
{
// Same as strcat(num, "00");
// in c.
num +="00";
length += 2;
}
else if (length % 3 == 2)
{
// Same as strcat(num, "0");
// in c.
num += "0";
length += 1;
}
// Alternatively add/subtract
// digits in group of three
// to result.
int sum = 0, p = 1;
for (int i = length - 1; i >= 0; i--)
{
// Store group of three
// numbers in group variable.
int group = 0;
group += num.charAt(i--) - '0';
group += (num.charAt(i--) - '0') * 10;
group += (num.charAt(i) - '0') * 100;
sum = sum + group * p;
// Generate alternate series
// of plus and minus
p *= (-1);
}
sum = Math.abs(sum);
return (sum % 13 == 0);
}
// Driver code
public static void main(String[] args)
{
String number = "83959092724";
if (checkDivisibility(number))
System.out.println(number +
" is divisible by 13.");
else
System.out.println(number +
" is not divisibe by 13.");
}
}
// This code is contributed by mits
Python 3
# Python 3 program to check whether a
# number is divisible by 13 or not
# Returns true if number is divisible
# by 13 else returns false
def checkDivisibility( num):
length = len(num)
if (length == 1 and num[0] == '0'):
return True
# Append required 0s at the beginning.
if (length % 3 == 1):
# Same as strcat(num, "00");
# in c.
num = str(num) + "00"
length += 2
elif (length % 3 == 2):
# Same as strcat(num, "0");
# in c.
num = str(num) + "0"
length += 1
# Alternatively add/subtract digits
# in group of three to result.
sum = 0
p = 1
for i in range(length - 1, -1 , -1) :
# Store group of three
# numbers in group variable.
group = 0
group += ord(num[i]) - ord('0')
i -= 1
group += (ord(num[i]) - ord('0')) * 10
i -= 1
group += (ord(num[i]) - ord('0')) * 100
sum = sum + group * p
# Generate alternate series
# of plus and minus
p *= (-1)
sum = abs(sum)
return (sum % 13 == 0)
# Driver code
if __name__ == "__main__":
number = "83959092724"
if (checkDivisibility(number)):
print( number , "is divisible by 13.")
else:
print( number ,"is not divisibe by 13.")
# This code is contributed by ChitraNayal
C#
// C# program to check
// whether a number is
// divisible by 13 or not.
using System;
class GFG {
// Returns true if number
// is divisible by 13 else
// returns false
static bool checkDivisibility(string num)
{
int length = num.Length;
if (length == 1 && num[0] == '0')
return true;
// Append required 0s .
// at the beginning.
if (length % 3 == 1)
{
// Same as strcat(num, "00");
// in c.
num +="00";
length += 2;
}
else if (length % 3 == 2)
{
// Same as strcat(num, "0");
// in c.
num += "0";
length += 1;
}
// Alternatively add/subtract
// digits in group of three
// to result.
int sum = 0, p = 1;
for (int i = length - 1; i >= 0; i--)
{
// Store group of three
// numbers in group variable.
int group = 0;
group += num[i--] - '0';
group += (num[i--] - '0') * 10;
group += (num[i] - '0') * 100;
sum = sum + group * p;
// Generate alternate series
// of plus and minus
p *= (-1);
}
sum = Math.Abs(sum);
return (sum % 13 == 0);
}
// Driver code
static void Main()
{
string number = "83959092724";
if (checkDivisibility(number))
Console.Write( number +
" is divisible by 13.");
else
Console.Write( number +
" is not divisibe by 13.");
}
}
// This code is contributed by Sam007
PHP
= 0; $i--)
{
// Store group of three
// numbers in group variable.
$group = 0;
$group += $num[$i--] - '0';
$group += ($num[$i--] - '0') * 10;
$group += ($num[$i] - '0') * 100;
$sum = $sum + $group * $p;
// Generate alternate series
// of plus and minus
$p *= (-1);
}
$sum = abs($sum);
return ($sum % 13 == 0);
}
// Driver code
$number = "83959092724";
if (checkDivisibility($number))
echo($number . " is divisible by 13.");
else
echo($number . " is not divisibe by 13.");
// This code is contributed by Ajit.
?>
Javascript
输出 :
83959092724 is divisible by 13.