Given a number (N), check if it is pentagonal or not.
Examples :
Input: 12
Output: Yes
Explanation: 12 is the third pentagonal number
Input: 19
Output: No
Explanation: The third pentagonal number is 12
while the fourth pentagonal number is 22.
Hence 19 is not a pentagonal number.
Pentagonal numbers are numbers which can be arranged to form a pentagon. If N is a pentagonal number then we can use N dots or points to generate a regular pentagon (Please see figure below).
The first few pentagonal numbers are 1, 5, 12, 22, 35, 51, 70, …
Image Source: Wiki
Method I (Iterative)
We begin by noting that the nth Pentagonal Number is given by

Follow an iterative process. Consecutively substitute n = 1, 2, 3 … into the formula and store the result in some variable M. Stop, if M >= N. After iteration if M equals N then N must be a pentagonal number. Else if M exceeds N then N cannot be a pentagonal number.
Algorithm
function isPentagonal(N)
Set i = 1
do
M = (3*i*i - i)/2
i += 1
while M < N
if M == N
print Yes
else
print No
Below is the implementation of the algorithm
C++
#include <iostream>
using namespace std;
bool isPentagonal( int N)
{
int i = 1, M;
do {
M = (3*i*i - i)/2;
i += 1;
}
while ( M < N );
return (M == N);
}
int main()
{
int N = 12;
if (isPentagonal(N))
cout << N << " is pentagonal " << endl;
else
cout << N << " is not pentagonal" << endl;
return 0;
}
|
Java
import java.io.*;
class GFG {
static Boolean isPentagonal( int N)
{
int i = 1 , M;
do {
M = ( 3 *i*i - i)/ 2 ;
i += 1 ;
}
while ( M < N );
return (M == N);
}
public static void main (String[] args) {
int N = 12 ;
if (isPentagonal(N))
System.out.println( N + " is pentagonal " );
else
System.out.println( N + " is not pentagonal" );
}
}
|
Python3
import math
def isPentagonal( N ) :
i = 1
while True :
M = ( 3 * i * i - i) / 2
i + = 1
if ( M > = N ):
break
return (M = = N)
N = 12
if (isPentagonal(N)):
print (N , end = ' ' )
print ( "is pentagonal " )
else :
print (N , end = ' ' )
print ( "is not pentagonal" )
|
C#
using System;
class GFG {
static bool isPentagonal( int N)
{
int i = 1, M;
do {
M = (3 * i * i - i) / 2;
i += 1;
}
while ( M < N );
return (M == N);
}
public static void Main ()
{
int N = 12;
if (isPentagonal(N))
Console.Write( N + " is pentagonal " );
else
Console.Write( N + " is not pentagonal" );
}
}
|
PHP
<?php
function isPentagonal(int $N )
{
$i = 1;
$M ;
do {
$M = (3 * $i * $i - $i ) / 2;
$i += 1;
}
while ( $M < $N );
return ( $M == $N );
}
$N = 12;
if (isPentagonal( $N ))
echo $N , " is pentagonal " ;
else
echo $N , " is not pentagonal" ;
?>
|
Javascript
<script>
function isPentagonal(N)
{
var i = 1, M;
do
{
M = (3 * i * i - i)/2;
i += 1;
}
while ( M < N );
return (M == N);
}
var N = 12;
if (isPentagonal(N))
document.write( N + " is pentagonal " );
else
document.write( N + " is not pentagonal" );
</script>
|
Output:
12 is pentagonal
The Time complexity of this method is O(n) since we need to compute successive values of pentagonal numbers up to N.
Method 2 (Efficient)
The formula indicates that the n-th pentagonal number depends quadratically on n. Therefore, try to find the positive integral root of N = P(n) equation.
P(n) = nth pentagonal number
N = Given Number
Solve for n:
P(n) = N
or (3*n*n – n)/2 = N
or 3*n*n – n – 2*N = 0 … (i)
The positive root of equation (i)
n = (1 + sqrt(24N+1))/6
After obtaining n, check if it is an integer or not. n is an integer if n – floor(n) is 0.
Implementation of the method is given below :
C++
#include <bits/stdc++.h>
using namespace std;
bool isPentagonal( int N)
{
float n = (1 + sqrt (24*N + 1))/6;
return (n - ( int ) n) == 0;
}
int main()
{
int N = 19;
if (isPentagonal(N))
cout << N << " is pentagonal " << endl;
else
cout << N << " is not pentagonal" << endl;
return 0;
}
|
Java
import java.io.*;
class GFG {
static Boolean isPentagonal( int N)
{
double n = ( 1 + Math.sqrt( 24 *N + 1 ))/ 6 ;
return (n - ( int ) n) == 0 ;
}
public static void main (String[] args) {
int N = 19 ;
if (isPentagonal(N))
System.out.println( N + " is pentagonal " );
else
System.out.println( N + " is not pentagonal" );
}
}
|
Python3
import math as m
def isPentagonal( n ):
n = ( 1 + m.sqrt( 24 * N + 1 )) / 6
return ( (n - int (n)) = = 0 )
N = 19
if (isPentagonal(N)):
print ( N, " is pentagonal " )
else :
print ( N, " is not pentagonal" )
|
C#
using System;
class GFG {
static bool isPentagonal( int N)
{
double n = (1 + Math.Sqrt(24 * N + 1)) / 6;
return (n - ( int )n) == 0;
}
public static void Main()
{
int N = 19;
if (isPentagonal(N))
Console.Write(N + " is pentagonal " );
else
Console.Write(N + " is not pentagonal" );
}
}
|
PHP
<?php
function isPentagonal( $N )
{
$n = (1 + sqrt(24 * $N + 1)) / 6;
return ( $n - (int) $n ) == 0;
}
$N = 19;
if (isPentagonal( $N ))
echo $N . " is pentagonal " ;
else
echo $N . " is not pentagonal" ;
?>
|
Javascript
<script>
function isPentagonal(N)
{
var n = (1 + Math.sqrt(24*N + 1))/6;
return (n - parseInt( n) == 0);
}
var N = 19;
if (isPentagonal(N))
document.write( N + " is pentagonal " );
else
document.write( N + " is not pentagonal" );
</script>
|
Output :
19 is not pentagonal
Time and Space Complexities of this method are both O(1).
References :
1) Wikipedia – Pentagonal Numbers
2) Wolfram Alpha – Pentagonal Numbers
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.