Given a range [L, R], the task is to find all the numbers from the range which are composite as well as the eventual sum of their digits is 1.
Examples:
Input: L = 10, R = 100
Output: 10 28 46 55 64 82 91 100
10 = 1 + 0 = 1
28 = 2 + 8 = 10 = 1 + 0 = 1
…
91 = 9 + 1 = 10 = 1 + 0 = 1
100 = 1 + 0 + 0 = 1
Input: L = 250, R = 350
Output: 253 262 280 289 298 316 325 334 343
Approach: For every number in the range check if the number is composite i.e. it has a divisor other than 1 and the number itself. If the current number is a composite number then keep on calculating the sum of its digits until the number is reduced to a single digit, if this digit is 1 then the chosen number is a valid number.
Below is the implementation of the above approach:
C++
// C++ implementation of the above approach #include <iostream> using namespace std; // Function that returns true if number n // is a composite number bool isComposite( int n) { // Corner cases if (n <= 1) return false ; if (n <= 3) return false ; // This is checked so that we can skip // middle five numbers in below loop if (n % 2 == 0 || n % 3 == 0) return true ; for ( int i = 5; i * i <= n; i = i + 6) if (n % i == 0 || n % (i + 2) == 0) return true ; return false ; } // Function that returns true if the eventual // digit sum of number nm is 1 bool isDigitSumOne( int nm) { // Loop till the sum is not single digit number while (nm > 9) { // Initialize the sum as zero int sum_digit = 0; // Find the sum of digits while (nm > 0) { int digit = nm % 10; sum_digit = sum_digit + digit; nm = nm / 10; } nm = sum_digit; } // If sum is eventually 1 if (nm == 1) return true ; else return false ; } // Function to print the required numbers // from the given range void printValidNums( int l, int r) { for ( int i = l; i <= r; i++) { // If i is one of the required numbers if (isComposite(i) && isDigitSumOne(i)) cout << i << " " ; } } // Driver code int main( void ) { int l = 10, r = 100; printValidNums(l, r); return 0; } |
Java
// Java implementation of the above approach public class GFG { // Function that returns true if number n // is a composite number static boolean isComposite( int n) { // Corner cases if (n <= 1 ) return false ; if (n <= 3 ) return false ; // This is checked so that we can skip // middle five numbers in below loop if (n % 2 == 0 || n % 3 == 0 ) return true ; for ( int i = 5 ; i * i <= n; i = i + 6 ) if (n % i == 0 || n % (i + 2 ) == 0 ) return true ; return false ; } // Function that returns true if the eventual // digit sum of number nm is 1 static boolean isDigitSumOne( int nm) { // Loop till the sum is not single // digit number while (nm > 9 ) { // Initialize the sum as zero int sum_digit = 0 ; // Find the sum of digits while (nm > 0 ) { int digit = nm % 10 ; sum_digit = sum_digit + digit; nm = nm / 10 ; } nm = sum_digit; } // If sum is eventually 1 if (nm == 1 ) return true ; else return false ; } // Function to print the required numbers // from the given range static void printValidNums( int l, int r) { for ( int i = l; i <= r; i++) { // If i is one of the required numbers if (isComposite(i) && isDigitSumOne(i)) System.out.print(i + " " ); } } // Driver code public static void main(String arg[]) { int l = 10 , r = 100 ; printValidNums(l, r); } } |
Python3
# Python3 implementation of the approach # Function that returns true if number n # is a composite number def isComposite(n): # Corner cases if (n < = 1 ): return False if (n < = 3 ): return False # This is checked so that we can skip # middle five numbers in below loop if (n % 2 = = 0 or n % 3 = = 0 ): return True i = 5 while (i * i < = n): if (n % i = = 0 or n % (i + 2 ) = = 0 ): return True i = i + 6 return False # Function that returns true if the eventual # digit sum of number nm is 1 def isDigitSumOne(nm) : # Loop till the sum is not single # digit number while (nm> 9 ) : # Initialize the sum as zero sum_digit = 0 # Find the sum of digits while (nm ! = 0 ) : digit = nm % 10 sum_digit = sum_digit + digit nm = nm / / 10 nm = sum_digit # If sum is eventually 1 if (nm = = 1 ): return True else : return False # Function to print the required numbers # from the given range def printValidNums(m, n ): for i in range (m, n + 1 ): # If i is one of the required numbers if (isComposite(i) and isDigitSumOne(i)) : print (i, end = " " ) # Driver code l = 10 r = 100 printValidNums(m, n) |
C#
// C# implementation of the above approach using System; class GFG { // Function that returns true if number n // is a composite number static bool isComposite( int n) { // Corner cases if (n <= 1) return false ; if (n <= 3) return false ; // This is checked so that we can skip // middle five numbers in below loop if (n % 2 == 0 || n % 3 == 0) return true ; for ( int i = 5; i * i <= n; i = i + 6) if (n % i == 0 || n % (i + 2) == 0) return true ; return false ; } // Function that returns true if the // eventual digit sum of number nm is 1 static bool isDigitSumOne( int nm) { // Loop till the sum is not single // digit number while (nm > 9) { // Initialize the sum as zero int sum_digit = 0; // Find the sum of digits while (nm > 0) { int digit = nm % 10; sum_digit = sum_digit + digit; nm = nm / 10; } nm = sum_digit; } // If sum is eventually 1 if (nm == 1) return true ; else return false ; } // Function to print the required numbers // from the given range static void printValidNums( int l, int r) { for ( int i = l; i <= r; i++) { // If i is one of the required numbers if (isComposite(i) && isDigitSumOne(i)) Console.Write(i + " " ); } } // Driver code static public void Main () { int l = 10, r = 100; printValidNums(l, r); } } // This code is contributed by jit_t |
PHP
<?php // PHP implementation of the above approach // Function that returns true if number n // is a composite number function isComposite( $n ) { // Corner cases if ( $n <= 1) return false; if ( $n <= 3) return false; // This is checked so that we can skip // middle five numbers in below loop if ( $n % 2 == 0 || $n % 3 == 0) return true; for ( $i = 5; $i * $i <= $n ; $i = $i + 6) if ( $n % $i == 0 || $n % ( $i + 2) == 0) return true; return false; } // Function that returns true if the eventual // digit sum of number nm is 1 function isDigitSumOne( $nm ) { // Loop till the sum is not single // digit number while ( $nm > 9) { // Initialize the sum as zero $sum_digit = 0; // Find the sum of digits while ( $nm > 0) { $digit = $nm % 10; $sum_digit = $sum_digit + $digit ; $nm = floor ( $nm / 10); } $nm = $sum_digit ; } // If sum is eventually 1 if ( $nm == 1) return true; else return false; } // Function to print the required numbers // from the given range function printValidNums( $l , $r ) { for ( $i = $l ; $i <= $r ; $i ++) { // If i is one of the required numbers if (isComposite( $i ) && isDigitSumOne( $i )) echo $i , " " ; } } // Driver code $l = 10; $r = 100; printValidNums( $l , $r ); // This code is contributed by Ryuga ?> |
Javascript
<script> // Javascript implementation of the above approach // Function that returns true if number n // is a composite number function isComposite(n) { // Corner cases if (n <= 1) return false ; if (n <= 3) return false ; // This is checked so that we can skip // middle five numbers in below loop if (n % 2 == 0 || n % 3 == 0) return true ; for (let i = 5; i * i <= n; i = i + 6) if (n % i == 0 || n % (i + 2) == 0) return true ; return false ; } // Function that returns true if the eventual // digit sum of number nm is 1 function isDigitSumOne(nm) { // Loop till the sum is not single digit number while (nm > 9) { // Initialize the sum as zero let sum_digit = 0; // Find the sum of digits while (nm > 0) { let digit = nm % 10; sum_digit = sum_digit + digit; nm = Math.floor(nm / 10); } nm = sum_digit; } // If sum is eventually 1 if (nm == 1) return true ; else return false ; } // Function to print the required numbers // from the given range function printValidNums(l, r) { for (let i = l; i <= r; i++) { // If i is one of the required numbers if (isComposite(i) && isDigitSumOne(i)) document.write(i + " " ); } } // Driver code let l = 10, r = 100; printValidNums(l, r); // This code is contributed by Mayank Tyagi </script> |
10 28 46 55 64 82 91 100
Time Complexity: O((r – l) * (sqrt(r – l) + log10(r – l)))
Auxiliary Space: O(1)
Optimizations : We can precompute composite numbers using Sieve Algorithms.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!