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

• Last Updated : 11 Nov, 2021

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 using namespace std; // Function to print numbers upto N// which are both pentagonal as well// as hexagonal numbersvoid 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 Programint main(){    long long int N = 1000000;    pen_hex(N);    return 0;}

Java

 // Java program of the above approachimport java.util.*; class GFG{ // Function to print numbers upto N// which are both pentagonal as well// as hexagonal numbersstatic 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 codepublic static void main(String[] args){    long N = 1000000;    pen_hex(N);}} // This code is contributed by offbeat

Python3

 # Python3 program of the above approachimport math # Function to print numbers upto N# which are both pentagonal as well# as hexagonal numbersdef 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 CodeN = 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 numbersstatic 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


Output:
1, 40755,

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

My Personal Notes arrow_drop_up