Open In App

Check if a given number is Pronic | Efficient Approach

Improve
Improve
Like Article
Like
Save
Share
Report

A pronic number is such a number which can be represented as a product of two consecutive positive integers. By multiplying these two consecutive positive integers, there can be formed a rectangle which is represented by the product or pronic number. So it is also known as Rectangular Number.
The first few Pronic numbers are: 
0, 2, 6, 12, 20, 30, 42, 56, 72, 90, 110, 132, 156, 182, 210, 240, 272, 306, 342, 380, 420, 462 . . . . . .
Pronic number is a number which is the product of two consecutive integers, that is, a number n is a product of x and (x+1). The task is to check if a given number is pronic or not.

Mathematical Representation: 

If x is a pronic number, then x=n(n+1) ? n?N0
Where, N0={0, 1, 2, 3, 4, ....}, (A set of Natural Numbers)

Examples: 

Input : 56
Output : YES
Explanation: 56 = 7 * 8 i.e 56 is a product of two consecutive integers 7 and 8.

Input : 65
Output : NO
Explanation: 65 cannot be represented as a product of any two consecutive integers.

We had previously discussed an approach to check if a number is pronic or not in this article using a loop. The time Complexity of the previous algorithm is comparatively very high and in terms of Big-O asymptotic notation, it is O(?n). 
In this article, we are going to explain an efficient approach with time complexity of O(log(log n). The idea is to observe that if a number can be expressed as the product of two consecutive integers then the two integers will be close to the square of root of that number. A more proper observation will lead to the fact that a number N can be represented as product of two consecutive integers only if the product of floor(sqrt(N)) and floor(sqrt(N))+1 is equal to N.

Below is the step by step algorithm of above approach:  

Step 1: Evaluate the square root value of the given number.
Step 2: Calculate the floor value of that square root.
Step 3: Calculate the product of value calculated in step-2
    and its next consecutive number.
Step 4: Check the product value in step-3 with the given number.
    Step 4.1: If the condition satisfies,
          then the number is a pronic number.
    Step 4.2: Otherwise the number is not a pronic number.

Below is the implementation of above algorithm: 

C++




// C/C++ program to check if a number is pronic or not
 
#include<bits/stdc++.h>
using namespace std;
 
// function to check Pronic Number
bool pronic_check(int n)
{
    int x = (int)(sqrt(n));
 
    // Checking Pronic Number by
    // multiplying consecutive numbers
    if (x*(x+1)==n)
        return true;
    else
        return false;
}
 
// Driver Code
int main(void)
{
    int n = 56;   
    pronic_check(n) == true? cout << "YES" :
                             cout << "NO";
     
    return 0;
}


Java




// Java program to check if a number is pronic or not
 
import java.io.*;
import java.util.*;
import java.math.*;
 
class GFG
{
 
    // Function to check Pronic Number
    static boolean pronic_check(int n)
    {
        int x = (int)(Math.sqrt(n));
     
        // Checking Pronic Number by
        // multiplying consecutive numbers
        if (x * (x + 1) == n)
            return true;
        else
            return false;
    }
     
    // Driver Code
    public static void main(String[] args)
    {
        int n = 56;       
        if (pronic_check(n)==true)
            System.out.println("YES");
        else
            System.out.println("NO");
    }
}


Python3




# Python program to check if a number is pronic or not
 
import math
 
# function to check Pronic Number
def pronic_check(n) :
    x = (int)(math.sqrt(n))
 
    # Checking Pronic Number by multiplying
    # consecutive numbers
    if (x*(x + 1)== n):
        return True
    else:
        return False
 
# Driver Code
n = 56
 
if (pronic_check(n)==True):
    print("YES")
else:
    print("NO")


C#




// C# program to check if a number is
// pronic or not
using System;
 
class GFG
{
 
    // Function to check Pronic Number
    static bool pronic_check(int n)
    {
        int x = (int)(Math.Sqrt(n));
     
        // Checking Pronic Number by
        // multiplying consecutive numbers
        if (x * (x + 1) == n)
            return true;
        else
            return false;
    }
     
    // Driver Code
    public static void Main()
    {
        int n = 56;
         
        if (pronic_check(n)==true)
            Console.Write("YES");
        else
            Console.Write("NO");
    }
}
 
// This code is contributed by vt_m.


PHP




<?php
// PHP program to check if a
// number is pronic or not
 
// function to check Pronic Number
function pronic_check($n)
{
    $x = floor(sqrt($n));
 
    // Checking Pronic Number by
    // multiplying consecutive numbers
    if ($x * ($x + 1) == $n)
        return true;
    else
        return false;
}
 
    // Driver Code
    $n = 56;
    if (pronic_check($n) == true)
        echo "YES" ;
    else
        echo "NO";
         
// This code is contributed by Sam007
?>


Javascript




<script>
 
// Javascript program to check if a number is pronic or not
 
// function to check Pronic Number
function pronic_check(n)
{
    var x = parseInt(Math.sqrt(n));
 
    // Checking Pronic Number by
    // multiplying consecutive numbers
    if (x * (x + 1) == n)
        return true;
    else
        return false;
}
 
// Driver Code
var n = 56;    
pronic_check(n) == true? document.write("YES") :
document.write("NO");
 
// This code is contributed by noob2000.
</script>


Output: 

YES

Time complexity: O(logn) because it is using inbuilt sqrt function
Auxiliary space: O(1)
 



Last Updated : 21 Sep, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads