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++ 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 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");
}
}
# 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# 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 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
?>
<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)