# Composite numbers with digit sum 1

• Last Updated : 23 Jun, 2022

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 ``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

 ` 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

 ``

Output:

`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.

My Personal Notes arrow_drop_up