📜  程序检查数字是否为Proth数字

📅  最后修改于: 2021-04-27 17:51:13             🧑  作者: Mango

给定正整数N,任务是检查它是否是Proth数。如果给定的编号是Proth编号,则打印“是”,否则打印“否”。

Proth Number 在数学中,Proth number是以下形式的正整数

其中k是一个奇数正整数, n是一个正整数,使得2 n > k

前几个Proth数字是–

例子:

Input: 25
Output: YES
    Taking k= 3 and n= 3, 
    25 can be expressed in the form of 
    (k.2n + 1) as (3.23 + 1) 

Input: 73
Output: NO
    Taking k=9 and n=3
    73 can be expressed in the form of
    (k.2n + 1 ) as  (9.23 + 1)
    But 23 is less than 9 
    (it should be greater than k to be Proth Number) 

方法

  1. 从数字中减去1。如果给定的数是proth数,则将以k * 2 n的形式给出一个数。
  2. 现在,循环遍历所有从k = 1到n / k的奇数,并检查k是否可以将n除以(n / k)为2的幂。
  3. 如果找到,则打印“是”
  4. 如果找不到这样的k值,则打印’NO’

以下是上述想法的实现

C++
// CPP program to check Proth number
 
#include 
using namespace std;
 
// Utility function to check power of two
bool isPowerOfTwo(int n)
{
    return (n && !(n & (n - 1)));
}
 
// Function to check if the
// Given number is Proth number or not
bool isProthNumber(int n)
{
 
    int k = 1;
    while (k < (n / k)) {
 
        // check if k divides n or not
        if (n % k == 0) {
 
            // Check if n/k is power of 2 or not
            if (isPowerOfTwo(n / k))
                return true;
        }
 
        // update k to next odd number
        k = k + 2;
    }
 
    // If we reach here means
    // there exists no value of K
    // Such that k is odd number
    // and n/k is a power of 2 greater than k
    return false;
}
 
// Driver code
int main()
{
 
    // Get n
    int n = 25;
 
    // Check n for Proth Number
    if (isProthNumber(n - 1))
        cout << "YES";
    else
        cout << "NO";
 
    return 0;
}


Java
// Java program to check for Proth number
 
class GFG {
 
    // Utility function to check power of two
    static boolean isPowerOfTwo(int n)
    {
        return n != 0 && ((n & (n - 1)) == 0);
    }
 
    // Function to check if the
    // Given number is Proth number or not
    static boolean isProthNumber(int n)
    {
 
        int k = 1;
        while (k < (n / k)) {
 
            // check if k divides n or not
            if (n % k == 0) {
 
                // Check if n/k is power of 2 or not
                if (isPowerOfTwo(n / k))
                    return true;
            }
 
            // update k to next odd number
            k = k + 2;
        }
 
        // If we reach here means
        // there exists no value of K
        // Such that k is odd number
        // and n/k is a power of 2 greater than k
        return false;
    }
 
    // Driver code
    public static void main(String[] args)
    {
 
        // Get n
        int n = 25;
 
        // Check n for Proth Number
        if (isProthNumber(n - 1))
            System.out.println("YES");
        else
            System.out.println("NO");
    }
}


Python3
# Python3 program to check for Proth number
         
# Utility funtion to Check
# power of two
def isPowerOfTwo(n):
       
    return (n and (not(n & (n - 1)))) 
     
     
# Function to check if the
# Given number is Proth number or not
def isProthNumber( n):
 
     
    k = 1
     
    while(k < (n//k)):
         
        # check if k divides n or not
        if(n % k == 0):
 
            # Check if n / k is power of 2 or not
            if(isPowerOfTwo(n//k)):
                    return True
         
  
        # update k to next odd number
        k = k + 2      
     
     
    # If we reach here means
    # there exists no value of K
    # Such that k is odd number 
    # and n / k is a power of 2 greater than k
    return False
         
             
             
# Driver code
 
# Get n
    int n = 25;
 
# Check n for Proth Number
if(isProthNumber(n-1)):
    print("YES");
else:
    print("NO");


C#
// C# program to check Proth number
 
using System;
class GFG {
 
    // Utility function to check power of two
    static bool isPowerOfTwo(int n)
    {
        return n != 0 && ((n & (n - 1)) == 0);
    }
 
    // Function to check if the
    // Given number is Proth number or not
    static bool isProthNumber(int n)
    {
 
        int k = 1;
        while (k < (n / k)) {
 
            // check if k divides n or not
            if (n % k == 0) {
 
                // Check if n/k is power of 2 or not
                if (isPowerOfTwo(n / k))
                    return true;
            }
 
            // update k to next odd number
            k = k + 2;
        }
 
        // If we reach here means
        // there exists no value of K
        // Such that k is odd number
        // and n/k is a power of 2 greater than k
        return false;
    }
 
    // Driver code
    public static void Main()
    {
 
        // Get n
        int n = 25;
 
        // Check n for Proth Number
        if (isProthNumber(n - 1))
            Console.WriteLine("YES");
        else
            Console.WriteLine("NO");
    }
}


PHP


Javascript


输出:
YES