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++
// 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)
Please Login to comment...