Program to check if N is a Pentagonal Number

• Difficulty Level : Easy
• Last Updated : 01 Dec, 2022

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, …

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

 // C++ program to check// pentagonal numbers.#include using namespace std; // Function to determine// if N is pentagonal or not.bool isPentagonal(int N){    int i = 1, M;         do {         // Substitute values of i        // in the formula.        M = (3*i*i - i)/2;        i += 1;    }    while ( M < N );         return (M == N);} // Driver Codeint main(){    int N = 12;         if (isPentagonal(N))        cout << N << " is pentagonal " << endl;       else        cout << N << " is not pentagonal" << endl;         return 0;}

Java

 // Java program to check// pentagonal numbers.import java.io.*; class GFG {     // Function to determine// if N is pentagonal or not.static Boolean isPentagonal(int N){    int i = 1, M;          do {          // Substitute values of        // i in the formula.        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");     }} // This code is contributed by Gitanjali.

Python3

 # python3 program to check# pentagonal numbers.import math # Function to determine if# N is pentagonal or not.def isPentagonal( N ) :     i = 1    while True:         # Substitute values of i        # in the formula.        M = (3 * i * i - i) / 2        i += 1             if ( M >= N ):            break         return (M == N)     # Driver methodN = 12if (isPentagonal(N)):    print(N , end = ' ')    print ("is pentagonal " )else:    print (N , end = ' ')    print ("is not pentagonal") # This code is contributed by Gitanjali.

C#

 // C# program to check pentagonal numbers.using System; class GFG {     // Function to determine// if N is pentagonal or not.static bool isPentagonal(int N){    int i = 1, M;         do {         // Substitute values of        // i in the formula.        M = (3 * i * i - i) / 2;        i += 1;    }    while ( M < N );         return (M == N);} // Driver Codepublic static void Main (){    int N = 12;         if (isPentagonal(N))    Console.Write( N + " is pentagonal " );    else    Console.Write( N + " is not pentagonal"); }} // This code is contributed by vt_m.

PHP

 

Javascript

 

Output

12 is pentagonal


Time Complexity: O(n), since we need to compute successive values of pentagonal numbers up to N.
Auxiliary Space: O(1) because it is using constant space for variables

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

 // C++ Program to check a// pentagonal number#include using namespace std; // Function to determine if// N is pentagonal or not.bool isPentagonal(int N){       // Get positive root of    // equation P(n) = N.    float n = (1 + sqrt(24*N + 1))/6;         // Check if n is an integral    // value of not. To get the    // floor of n, type cast to int.    return (n - (int) n) == 0;} // Driver Codeint main(){    int N = 19;       if (isPentagonal(N))        cout << N << " is pentagonal " << endl;       else        cout << N << " is not pentagonal" << endl;       return 0;}

Java

 // Java program to check// pentagonal numbers.import java.io.*; class GFG {     // Function to determine if// N is pentagonal or not.static Boolean isPentagonal(int N){        // Get positive root of    // equation P(n) = N.    double n = (1 + Math.sqrt(24*N + 1))/6;         // Check if n is an integral    // value of not. To get the    // floor of n, type cast to int.    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");     }} // This code is contributed by Gitanjali.

Python3

 # Python3 code Program to # check a pentagonal number # Import math libraryimport math as m # Function to determine if# N is pentagonal or notdef isPentagonal( n ):         # Get positive root of    # equation P(n) = N.    n = (1 + m.sqrt(24 * N + 1)) / 6          # Check if n is an integral    # value of not. To get the    # floor of n, type cast to int    return( (n - int (n)) == 0) # Driver CodeN = 19 if (isPentagonal(N)):    print ( N, " is pentagonal " )else:    print ( N, " is not pentagonal" ) # This code is contributed by 'saloni1297'

C#

 // C# program to check pentagonal numbers.using System; class GFG {     // Function to determine if    // N is pentagonal or not.    static bool isPentagonal(int N)    {        // Get positive root of        // equation P(n) = N.        double n = (1 + Math.Sqrt(24 * N + 1)) / 6;         // Check if n is an integral        // value of not. To get the        // floor of n, type cast to int.        return (n - (int)n) == 0;    }         // Driver Code    public static void Main()    {        int N = 19;         if (isPentagonal(N))            Console.Write(N + " is pentagonal ");        else            Console.Write(N + " is not pentagonal");    }} // This code is contributed by vt_m.

PHP

 

Javascript

 

Output

19 is not pentagonal


Time complexity: O(log N) for given n, as it is using inbuilt sqrt function
Auxiliary Space: O(1)

References :
1) Wikipedia – Pentagonal Numbers
2) Wolfram Alpha – Pentagonal Numbers

My Personal Notes arrow_drop_up