📌  相关文章
📜  使用按位运算运算符检查数字是否可被17整除

📅  最后修改于: 2021-05-07 08:03:21             🧑  作者: Mango

给定一个数字n,请使用按位运算运算符检查它是否可被17整除。
例子:

Input : n = 34
Output : 34 is divisible by 17

Input :  n = 43
Output : 43 is not divisible by 17

一个简单的方法是由%运算符检查它是否保留0的余数。
要使用按位运算符进行除法,我们必须以2的幂重写表达式。

n/17 = (16*n)/(17*16)
     = (17 - 1)*n/(17*16)
     = (n/16) - (n/(17*16))

我们可以使用一般的除法规则将n / 16重写为floor(n / 16)+(n%16)/ 16。

n/17 = floor(n/16) + (n%16)/16 - 
       (floor(n/16) + (n%16)/16)/17
     = floor(n/16) - (floor(n/16) - 
            17*(n%16)/16 + (n%16)/16)/17
     = floor(n/16) - (floor(n/16)-n%16)/17

该方程式的左侧是n / 17。仅当右侧是整数时,它才是整数。 floor(n / 16)根据定义是整数。因此,如果(floor(n / 16)-n%16)/ 17也是整数,则整个左侧将是一个整数。
这意味着如果(floor(n / 16)-n%16)可被17整除,则n可被17整除。
(floor(n / 16)-n%16)可以按位表示为(int)(n >> 4)–(int)(n&15) ,其中n >> 4表示n / 16,n%15表示n% 15
下面是上述方法的实现:

CPP
// CPP program to check if a number is
// divisible by 17 or not using bitwise
// operator.
#include 
using namespace std;
 
// function to check recursively if the
// number is divisible by 17 or not
bool isDivisibleby17(int n)
{
    // if n=0 or n=17 then yes
    if (n == 0 || n == 17)
        return true;
 
    // if n is less then 17, not
    // divisible by 17
    if (n < 17)
        return false;
 
    // reducing the number by floor(n/16)
    // - n%16
    return isDivisibleby17((int)(n >> 4) - (int)(n & 15));
}
 
// driver code to check the above function
int main()
{
    int n = 35;
    if (isDivisibleby17(n))
        cout << n << " is divisible by 17";
    else
        cout << n << " is not divisible by 17";
    return 0;
}


Java
// Java program to check if a number is
// divisible by 17 or not using bitwise
// operator.
class GFG{
     
    // function to check recursively if the
    // number is divisible by 17 or not
    static boolean isDivisibleby17(int n)
    {
         
        // if n=0 or n=17 then yes
        if (n == 0 || n == 17)
            return true;
     
        // if n is less then 17, not
        // divisible by 17
        if (n < 17)
            return false;
     
        // reducing the number by
        // floor(n/16) - n%16
        return isDivisibleby17((int)(n >> 4)
                            - (int)(n & 15));
    }
     
    // driver function
    public static void main(String[] args)
    {
        int n = 35;
        if (isDivisibleby17(n) == true)
            System.out.printf
            ("%d is divisible by 17",n);
        else
            System.out.printf
            ("%d is not divisible by 17",n);
    }
}
 
// This code is contributed by
// Smitha Dinesh Semwal


Python3
# Python 3 program to
# check if a number is
# divisible by 17 or
# not using bitwise
# operator.
 
# function to check recursively if the
# number is divisible by 17 or not
def isDivisibleby17(n):
 
    # if n=0 or n=17 then yes
    if (n == 0 or n == 17):
        return True
 
    # if n is less then 17, not
    # divisible by 17
    if (n < 17):
        return False
 
    # reducing the number by floor(n/16)
    # - n%16
    return isDivisibleby17((int)(n >> 4) - (int)(n & 15))
 
 
# driver code to check the above function
n = 35
if (isDivisibleby17(n)):
    print(n,"is divisible by 17")
else:
    print(n,"is not divisible by 17")
 
# This code is contributed by
# Smitha Dinesh Semwal


C#
// C# program to check if a number is
// divisible by 17 or not using bitwise
// operator.
using System;
 
class GFG
{
     
    // function to check recursively if the
    // number is divisible by 17 or not
    static bool isDivisibleby17(int n)
    {
         
        // if n=0 or n=17 then yes
        if (n == 0 || n == 17)
            return true;
     
        // if n is less then 17, not
        // divisible by 17
        if (n < 17)
            return false;
     
        // reducing the number by
        // floor(n/16) - n%16
        return isDivisibleby17((int)(n >> 4)
                            - (int)(n & 15));
    }
     
    // Driver function
    public static void Main()
    {
        int n = 35;
        if (isDivisibleby17(n) == true)
            Console.WriteLine
            (n +"is divisible by 17");
        else
            Console.WriteLine
            ( n+ " is not divisible by 17");
    }
}
 
// This code is contributed by
// vt_m


PHP
> 4) -
                            (int)($n & 15));
}
 
    // Driver Code
    $n = 35;
    if (isDivisibleby17($n))
        echo $n." is divisible by 17";
    else
        echo $n." is not divisible by 17";
 
// This code is contributed by mits
?>


Javascript


输出:

35 is not divisible by 17