Given a number ‘n’, the task is to generate the first ‘n’ Stormer numbers.
A Stormer Number is a positive integer ‘i’ such that the greatest prime factor of the term is greater than or equal to .
For example, 5 is a Stormer number because the greatest prime factor of 26(i.e 5*5 + 1) is 13 which is greater than or equal to 10(i.e 2*5)
Input : 5
Output : 1 2 4 5 6
Here 3 is not a Stormer number because the greatest prime
factor of 10(i.e 3*3 + 1) is 5, which is not greater than
or equal to 6(i.e 2*3)
Input : 10
Output : 1 2 4 5 6 9 10 11 12 14
- For a number ‘i’, first find the largest prime factor of the number i*i + 1.
- Next, test whether that prime factor is greater than or equal to 2*i.
- If it is greater then ‘i’ is a Stormer number.
Below is the implementation of above approach:
C++
// C++ program to print // Stormer numbers // Function to find // largest prime factor #include <bits/stdc++.h> using namespace std; int maxPrimeFactors( int n) { // Initialize the maximum // prime factor variable // with the lowest one int maxPrime = -1; // Print the number of // 2's that divide n while (n % 2 == 0) { maxPrime = 2; n /= 2; } // n must be odd at this // point, thus skip the // even numbers and iterate // only for odd integers for ( int i = 3; i < ( int )( sqrt (n)+ 1); i += 2) while (n % i == 0) { maxPrime = i; n /= i; } // This condition is to handle // the case when n is a prime // number greater than 2 if (n > 2) maxPrime = n; return ( int )(maxPrime); } // Function to generate // Stormer Numbers int stormer( int n) { int i = 1; // Stores the number of // Stormer numbers found int count = 0; while (count < n) { int t = i * i + 1; if (maxPrimeFactors(t) >= 2 * i) { cout << i ; cout << " " ; count += 1; } i += 1; } return i; } // Driver Code int main() { int n = 10; stormer(n); } |
Java
// Java program to print // Stormer numbers // Function to find // largest prime factor import java.io.*; class GFG { static int maxPrimeFactors( int n) { // Initialize the maximum // prime factor variable // with the lowest one int maxPrime = - 1 ; // Print the number of // 2's that divide n while (n % 2 == 0 ) { maxPrime = 2 ; n /= 2 ; } // n must be odd at this // point, thus skip the // even numbers and iterate // only for odd integers for ( int i = 3 ; i < ( int )(Math.sqrt(n)+ 1 ); i += 2 ) while (n % i == 0 ) { maxPrime = i; n /= i; } // This condition is to handle // the case when n is a prime // number greater than 2 if (n > 2 ) maxPrime = n; return ( int )(maxPrime); } // Function to generate // Stormer Numbers static int stormer( int n) { int i = 1 ; // Stores the number of // Stormer numbers found int count = 0 ; while (count < n) { int t = i * i + 1 ; if (maxPrimeFactors(t) >= 2 * i) { System.out.print (i + " " ); count += 1 ; } i += 1 ; } return i; } // Driver Code public static void main (String[] args) { int n = 10 ; stormer(n); } } //This code is contributed akt_mit |
Python3
# Python program to print Stormer numbers from __future__ import print_function # Function to find largest prime factor def maxPrimeFactors(n): # Initialize the maximum prime factor # variable with the lowest one maxPrime = - 1 # Print the number of 2's that divide n while n % 2 = = 0 : maxPrime = 2 n / = 2 # n must be odd at this point, thus skip # the even numbers and iterate only for # odd integers for i in range ( 3 , int (n * * 0.5 ) + 1 , 2 ): while n % i = = 0 : maxPrime = i n / = i # This condition is to handle the case when # n is a prime number greater than 2 if n > 2 : maxPrime = n return int (maxPrime) # Function to generate Stormer Numbers def stormer(n): i = 1 # Stores the number of Stormer numbers found count = 0 while (count < n): t = i * i + 1 if maxPrimeFactors(t) > = 2 * i: print (i, end = ' ' ) count + = 1 i + = 1 # Driver Method if __name__ = = '__main__' : n = 10 stormer(n) |
C#
// C# program to print // Stormer numbers using System; // Function to find // largest prime factor public class GFG{ static int maxPrimeFactors( int n) { // Initialize the maximum // prime factor variable // with the lowest one int maxPrime = -1; // Print the number of // 2's that divide n while (n % 2 == 0) { maxPrime = 2; n /= 2; } // n must be odd at this // point, thus skip the // even numbers and iterate // only for odd integers for ( int i = 3; i < ( int )(Math.Sqrt(n)+ 1); i += 2) while (n % i == 0) { maxPrime = i; n /= i; } // This condition is to handle // the case when n is a prime // number greater than 2 if (n > 2) maxPrime = n; return ( int )(maxPrime); } // Function to generate // Stormer Numbers static int stormer( int n) { int i = 1; // Stores the number of // Stormer numbers found int count = 0; while (count < n) { int t = i * i + 1; if (maxPrimeFactors(t) >= 2 * i) { Console.Write(i + " " ); count += 1; } i += 1; } return i; } // Driver Code static public void Main (){ int n = 10; stormer(n); } } //This code is contributed akt_mit |
PHP
<?php // PHP program to print // Stormer numbers // Function to find // largest prime factor function maxPrimeFactors( $n ) { // Initialize the maximum // prime factor variable // with the lowest one $maxPrime = -1; // Print the number of // 2's that divide n while ( $n % 2 == 0) { $maxPrime = 2; $n /= 2; } // n must be odd at this // point, thus skip the // even numbers and iterate // only for odd integers for ( $i = 3; $i < (int)(sqrt( $n )+ 1); $i += 2) while ( $n % $i == 0) { $maxPrime = $i ; $n /= $i ; } // This condition is to handle // the case when n is a prime // number greater than 2 if ( $n > 2) $maxPrime = $n ; return (int)( $maxPrime ); } // Function to generate // Stormer Numbers function stormer( $n ) { $i = 1; // Stores the number of // Stormer numbers found $count = 0; while ( $count < $n ) { $t = $i * $i + 1; if (maxPrimeFactors( $t ) >= 2 * $i ) { echo $i . " " ; $count += 1; } $i += 1; } } // Driver Code $n = 10; stormer( $n ); // This code is contributed // by mits ?> |
Javascript
<script> // Javascript program to print Stormer numbers // Function to find largest prime factor function maxPrimeFactors(n) { // Initialize the maximum // prime factor variable // with the lowest one let maxPrime = -1; // Print the number of // 2's that divide n while (n % 2 == 0) { maxPrime = 2; n = parseInt(n / 2, 10); } // n must be odd at this // point, thus skip the // even numbers and iterate // only for odd integers for (let i = 3; i < parseInt(Math.sqrt(n)+ 1); i += 2) while (n % i == 0) { maxPrime = i; n = parseInt(n / i, 10); } // This condition is to handle // the case when n is a prime // number greater than 2 if (n > 2) maxPrime = n; return (maxPrime); } // Function to generate // Stormer Numbers function stormer(n) { let i = 1; // Stores the number of // Stormer numbers found let count = 0; while (count < n) { let t = i * i + 1; if (maxPrimeFactors(t) >= 2 * i) { document.write(i + " " ); count += 1; } i += 1; } return i; } let n = 10; stormer(n); // This code is contributed by rameshtravel07. </script> |
1 2 4 5 6 9 10 11 12 14
Time Complexity: O(k * sqrt(k)) where k is the nth Stormer number.
Space Complexity: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!