Open In App

Find all numbers up to N which are both Pentagonal and Hexagonal

Last Updated : 11 Nov, 2021
Improve
Improve
Like Article
Like
Save
Share
Report

Given an integer N, the task is to find all numbers up to N, which are both Pentagonal as well as Hexagonal.
Example: 
 

Input: N = 1000 
Output: 1
Input: N = 100000 
Output: 1, 40755 
 

 

Approach: 
 

  • To solve the problem, we are generating all pentagonal numbers up to N and check if those are hexagonal numbers or not.
  • Formula to calculate ith Pentagonal Number
     

i * ( 3 * i – 1 ) / 2

  • To check if a pentagonal number, say pn, is a hexagonal number or not: 
     

( 1 + sqrt(8 * pn + 1 ) ) / 4 needs to be a Natural number

Below is the implementation of the above approach: 
 

C++




// C++ Program of the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to print numbers upto N
// which are both pentagonal as well
// as hexagonal numbers
void pen_hex(long long n)
{
    long long pn = 1;
    for (long long int i = 1;; i++) {
 
        // Calculate i-th pentagonal number
        pn = i * (3 * i - 1) / 2;
 
        if (pn > n)
            break;
 
        // Check if the pentagonal number
        // pn is hexagonal or not
        long double seqNum
            = (1 + sqrt(8 * pn + 1)) / 4;
 
        if (seqNum == long(seqNum))
            cout << pn << ", ";
    }
}
 
// Driver Program
int main()
{
    long long int N = 1000000;
    pen_hex(N);
    return 0;
}


Java




// Java program of the above approach
import java.util.*;
 
class GFG{
 
// Function to print numbers upto N
// which are both pentagonal as well
// as hexagonal numbers
static void pen_hex(long n)
{
    long pn = 1;
    for(long i = 1; i < n; i++)
    {
         
        // Calculate i-th pentagonal number
        pn = i * (3 * i - 1) / 2;
 
        if (pn > n)
            break;
 
        // Check if the pentagonal number
        // pn is hexagonal or not
        double seqNum = (1 + Math.sqrt(
                        8 * pn + 1)) / 4;
 
        if (seqNum == (long)seqNum)
            System.out.print(pn + ", ");
    }
}
 
// Driver code
public static void main(String[] args)
{
    long N = 1000000;
    pen_hex(N);
}
}
 
// This code is contributed by offbeat


Python3




# Python3 program of the above approach
import math
 
# Function to print numbers upto N
# which are both pentagonal as well
# as hexagonal numbers
def pen_hex(n):
 
    pn = 1
    for i in range(1, N):
 
        # Calculate i-th pentagonal number
        pn = (int)(i * (3 * i - 1) / 2)
 
        if (pn > n):
            break
 
        # Check if the pentagonal number
        # pn is hexagonal or not
        seqNum = (1 + math.sqrt(8 * pn + 1)) / 4
 
        if (seqNum == (int)(seqNum)):
            print(pn, end = ", ")
 
# Driver Code
N = 1000000
 
pen_hex(N)
 
# This code is contributed by divyeshrabadiya07


C#




// C# program of the above approach 
using System;
using System.Collections.Generic;
 
class GFG{        
             
// Function to print numbers upto N
// which are both pentagonal as well
// as hexagonal numbers
static void pen_hex(long n)
{
    long pn = 1;
    for(long i = 1;; i++)
    {
         
        // Calculate i-th pentagonal number
        pn = i * (3 * i - 1) / 2;
 
        if (pn > n)
            break;
 
        // Check if the pentagonal number
        // pn is hexagonal or not
        double seqNum = (1 + Math.Sqrt(
                         8 * pn + 1)) / 4;
 
        if (seqNum == (long)(seqNum))
        {
            Console.Write(pn + ", ");
        }
    }
}
         
// Driver Code        
public static void Main (string[] args)
{        
    long N = 1000000;
     
    pen_hex(N);
}        
}
 
// This code is contributed by rutvik_56


Javascript




<script>
// javascript program of the above approach
  
// Function to print numbers upto N
// which are both pentagonal as well
// as hexagonal numbers
function pen_hex(n)
{
    var pn = 1;
    for(i = 1; i < n; i++)
    {
         
        // Calculate i-th pentagonal number
        pn = parseInt(i * (3 * i - 1) / 2);
 
        if (pn > n)
            break;
 
        // Check if the pentagonal number
        // pn is hexagonal or not
        var seqNum = (1 + Math.sqrt(
                        8 * pn + 1)) / 4;
 
        if (seqNum == parseInt(seqNum))
            document.write(pn + ", ");
    }
}
 
// Driver code
var N = 1000000;
pen_hex(N);
 
// This code is contributed by Amit Katiyar
</script>


Output: 

1, 40755,

 

Time Complexity: O(N) 
Auxiliary space: O(1)
 



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads