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 ``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

 ``
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