给定一个字符串str和数字K形式的大数,任务是检查字符串str形成的数字是否能被K整除,其中K是 2 的幂。
例子:
Input: str = “5426987513245621541524288”, num = 64
Output: Yes
Explanation:
Since log2(64) = 6, so the number formed by the last 6 digits from the string str is divisible by 64 .
Input: str = “21346775656413259795656497974113461254”, num = 4
Output: No
Explanation:
Since log2(4)=2, the number formed by the last 2 digits from the string str is not divisible by 4.
方法:
由于K是2的完美幂。令K可以表示为 2 X 。那么根据2的完全幂的整除规则,如果给定数的最后X位能被K整除,则给定数能被K整除,否则不能被K整除。
下面是上述方法的实现:
C++
// C++ program for the above approach
#include
using namespace std;
// Function to check divisibility
bool checkIfDivisible(string str,
long long int num)
{
// Calculate the number of digits in num
long long int powerOf2 = log2(num);
// Check if the length of
// the string is less than
// the powerOf2 then
// return false
if (str.length() < powerOf2)
return false;
// Check if the powerOf2 is 0
// that means the given number
// is 1 and as every number
// is divisible by 1 so return true
if (powerOf2 == 0)
return true;
// Find the number which is
// formed by the last n digits
// of the string where n=powerOf2
long long int i, number = 0;
int len = str.length();
for (i = len - powerOf2; i < len; i++) {
number += (str[i] - '0')
* pow(10,
powerOf2 - 1);
powerOf2--;
}
// Check if the number formed is
// divisible by input num or not
if (number % num)
return false;
else
return true;
}
// Driver Code
int main()
{
// Given number
string str = "213467756564";
long long int num = 4;
// Function Call
if (checkIfDivisible(str, num))
cout << "Yes";
else
cout << "No";
return 0;
}
Java
// Java program for the above approach
class GFG{
// Function to check divisibility
static boolean checkIfDivisible(String str,
long num)
{
// Calculate the number of digits in num
long powerOf2 = (int)(Math.log(num) /
Math.log(2));
// Check if the length of
// the string is less than
// the powerOf2 then
// return false
if (str.length() < powerOf2)
return false;
// Check if the powerOf2 is 0
// that means the given number
// is 1 and as every number
// is divisible by 1 so return true
if (powerOf2 == 0)
return true;
// Find the number which is
// formed by the last n digits
// of the string where n=powerOf2
long i, number = 0;
int len = str.length();
for(i = len - powerOf2; i < len; i++)
{
number += (str.charAt((int)i) - '0') *
Math.pow(10, powerOf2 - 1);
powerOf2--;
}
// Check if the number formed is
// divisible by input num or not
if (number % num != 0)
return false;
else
return true;
}
// Driver Code
public static void main(String[] args)
{
// Given number
String str = "213467756564";
long num = 4;
// Function call
if (checkIfDivisible(str, num))
System.out.print("Yes");
else
System.out.print("No");
}
}
// This code is contributed by rutvik_56
Python3
# Python3 program for the above approach
from math import log2
# Function to check divisibility
def checkIfDivisible(string, num):
# Calculate the number of digits in num
powerOf2 = int(log2(num));
# Check if the length of
# the string is less than
# the powerOf2 then
# return false
if (len(string) < powerOf2):
return False;
# Check if the powerOf2 is 0
# that means the given number
# is 1 and as every number
# is divisible by 1 so return true
if (powerOf2 == 0):
return True;
# Find the number which is
# formed by the last n digits
# of the string where n=powerOf2
number = 0;
length = len(string);
for i in range(length - powerOf2, length):
number += ((ord(string[i]) - ord('0')) *
(10 ** (powerOf2 - 1)));
powerOf2 -= 1;
# Check if the number formed is
# divisible by input num or not
if (number % num):
return False;
else :
return True;
# Driver Code
if __name__ == "__main__" :
# Given number
string = "213467756564";
num = 4;
# Function Call
if (checkIfDivisible(string, num)):
print("Yes");
else :
print("No");
# This code is contributed by AnkitRai01
C#
// C# program for the above approach
using System;
class GFG{
// Function to check divisibility
static bool checkIfDivisible(String str,
long num)
{
// Calculate the number of digits in num
long powerOf2 = (int)(Math.Log(num) /
Math.Log(2));
// Check if the length of
// the string is less than
// the powerOf2 then
// return false
if (str.Length < powerOf2)
return false;
// Check if the powerOf2 is 0
// that means the given number
// is 1 and as every number
// is divisible by 1 so return true
if (powerOf2 == 0)
return true;
// Find the number which is
// formed by the last n digits
// of the string where n=powerOf2
long i, number = 0;
int len = str.Length;
for(i = len - powerOf2; i < len; i++)
{
number += (long)((str[(int)i] - '0') *
Math.Pow(10, powerOf2 - 1));
powerOf2--;
}
// Check if the number formed is
// divisible by input num or not
if (number % num != 0)
return false;
else
return true;
}
// Driver Code
public static void Main(String[] args)
{
// Given number
String str = "213467756564";
long num = 4;
// Function call
if (checkIfDivisible(str, num))
Console.Write("Yes");
else
Console.Write("No");
}
}
// This code is contributed by amal kumar choubey
Javascript
输出:
Yes
时间复杂度: O(Len),其中 Len 是字符串的长度。
辅助空间: O(log 2 K)