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

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

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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; 

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Output:

1, 40755,

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

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.