Skip to content
Related Articles

Related Articles

Program to check whether a number is Proth number or not
  • Last Updated : 09 Apr, 2021

Given a positive integer N, the task is to check if it is a Proth number. If the given number is a Proth number then print ‘YES’ otherwise print ‘NO’.

Proth Number: In mathematics, a Proth number is a positive integer of the form 

n = k * 2n + 1

where k is an odd positive integer and n is a positive integer such that 2n > k .

The first few Proth numbers are – 



3, 5, 9, 13, 17, 25, 33, 41, 49, ……

Examples:  

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) 

Approach 

  1. Deduct 1 from the number. This would give a number in the form k*2n, if the given number is a proth number.
  2. Now, loop through all odd number starting form k=1 to n/k and check if k can divide n in such a way that ( n/k ) is a power of 2 or not.
  3. If found, print ‘YES’
  4. If no such value of k is found then Print ‘NO’

Below is the implementation of above idea 

C++




// CPP program to check Proth number
 
#include <bits/stdc++.h>
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




<?php
// PHP program to check Proth number
 
// Utility function to check
// power of two
function isPowerOfTwo($n)
{
    return ($n && !($n & ($n - 1)));
}
 
// Function to check if the
// Given number is Proth
// number or not
function 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
$n = 25;
 
// Check n for Proth Number
if (isProthNumber($n - 1))
    echo "YES";
else
    echo "NO";
     
// This code is contributed
// by inder_verma
?>

Javascript




<script>
 
// Javascript program to check Proth number
 
// Utility function to check power of two
function isPowerOfTwo(n)
{
    return (n && !(n & (n - 1)));
}
 
// Function to check if the
// Given number is Proth number or not
function isProthNumber(n)
{
    let k = 1;
    while (k < parseInt(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(parseInt(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
let n = 25;
 
// Check n for Proth Number
if (isProthNumber(n - 1))
    document.write("YES");
else
    document.write("NO");
     
// This code is contributed by souravmahato348
 
</script>
Output: 
YES

 

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up
Recommended Articles
Page :