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)