Program to check whether a number is Proth number or not
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
- Deduct 1 from the number. This would give a number in the form k*2n, if the given number is a proth number.
- 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.
- If found, print ‘YES’
- 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 function 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