Given two numbers A and B, A<=B, the task is to find the number of unary numbers between A and B, both inclusive.

**Unary Number**: Consider the number 28. If we take the sum of square of its digits, 2*2 + 8*8, we get 68. Taking the sum of squares of digits again, we get 6*6 + 8*8=100. Doing this again, we get 1*1 + 0*0 + 0*0 = 1. Any such number, which ultimately leads to 1, is called a unary number.

**Examples:**

Input : A = 1, B = 10 Output : 3 Input : A = 100, B = 150 Output : 7

The idea is to recursively calculate sum of squares of digits of the number and every time recurring down replace the number with calculated sum.

The **base cases** of the recursion will be:

- If the sum if reduced to either 1 or 7, then answer is true.
- If the sum if reduced to a single digit integer other than 1 and 7, answer is false.

Below is the recursive implementation of this problem:

## C++

`// CPP program to count unary numbers ` `// in a range ` ` ` `#include <iostream> ` `using` `namespace` `std; ` ` ` `// Function to check if a number is unary ` `bool` `isUnary(` `int` `n) ` `{ ` ` ` `/// Base case. Note that if we repeat ` ` ` `// above process for 7, we get 1. ` ` ` `if` `(n == 1 || n == 7) ` ` ` `return` `true` `; ` ` ` `else` `if` `(n / 10 == 0) ` ` ` `return` `false` `; ` ` ` ` ` `/// rec case ` ` ` `int` `x, sum = 0; ` ` ` `while` `(n != 0) { ` ` ` `x = n % 10; ` ` ` `sum = sum + x * x; ` ` ` `n = n / 10; ` ` ` `} ` ` ` ` ` `isUnary(sum); ` `} ` ` ` `// Function to count unary numbers ` `// in a range ` `int` `countUnary(` `int` `a, ` `int` `b) ` `{ ` ` ` `int` `count = 0; ` ` ` ` ` `for` `(` `int` `i = a; i <= b; i++) { ` ` ` `if` `(isUnary(i) == 1) ` ` ` `count++; ` ` ` `} ` ` ` ` ` `return` `count; ` `} ` ` ` `// Driver Code ` `int` `main() ` `{ ` ` ` `int` `a = 1000, b = 1099; ` ` ` ` ` `cout << countUnary(a, b); ` ` ` ` ` `return` `0; ` `} ` |

## Java

`//Java program to count unary numbers ` `// in a range ` ` ` `import` `java.io.*; ` ` ` `class` `GFG { ` ` ` `// Function to check if a number is unary ` `static` `boolean` `isUnary(` `int` `n) ` `{ ` ` ` `/// Base case. Note that if we repeat ` ` ` `// above process for 7, we get 1. ` ` ` `if` `(n == ` `1` `|| n == ` `7` `) ` ` ` `return` `true` `; ` ` ` `else` `if` `(n / ` `10` `== ` `0` `) ` ` ` `return` `false` `; ` ` ` ` ` `/// rec case ` ` ` `int` `x, sum = ` `0` `; ` ` ` `while` `(n != ` `0` `) { ` ` ` `x = n % ` `10` `; ` ` ` `sum = sum + x * x; ` ` ` `n = n / ` `10` `; ` ` ` `} ` ` ` `return` `isUnary(sum); ` `} ` ` ` `// Function to count unary numbers ` `// in a range ` `static` `int` `countUnary(` `int` `a, ` `int` `b) ` `{ ` ` ` `int` `count = ` `0` `; ` ` ` ` ` `for` `(` `int` `i = a; i <= b; i++) { ` ` ` `if` `(isUnary(i) == ` `true` `) ` ` ` `count++; ` ` ` `} ` ` ` ` ` `return` `count; ` `} ` ` ` `// Driver Code ` ` ` ` ` `public` `static` `void` `main (String[] args) { ` ` ` ` ` ` ` `int` `a = ` `1000` `, b = ` `1099` `; ` ` ` `System.out.println (countUnary(a, b)); ` ` ` ` ` `} ` `//This code is contributed by ajit ` `} ` |

## Python3

`# Python 3 program to count unary numbers ` `# in a range ` ` ` `# Function to check if a number is unary ` `def` `isUnary(n): ` ` ` ` ` `# Base case. Note that if we repeat ` ` ` `# above process for 7, we get 1. ` ` ` `if` `(n ` `=` `=` `1` `or` `n ` `=` `=` `7` `): ` ` ` `return` `True` ` ` `elif` `(` `int` `(n ` `/` `10` `) ` `=` `=` `0` `): ` ` ` `return` `False` ` ` ` ` `# rec case ` ` ` `sum` `=` `0` ` ` `while` `(n !` `=` `0` `): ` ` ` `x ` `=` `n ` `%` `10` ` ` `sum` `=` `sum` `+` `x ` `*` `x ` ` ` `n ` `=` `int` `(n ` `/` `10` `) ` ` ` ` ` `return` `isUnary(` `sum` `) ` ` ` `# Function to count unary numbers ` `# in a range ` `def` `countUnary(a, b): ` ` ` `count ` `=` `0` ` ` ` ` `for` `i ` `in` `range` `(a, b ` `+` `1` `, ` `1` `): ` ` ` `if` `(isUnary(i) ` `=` `=` `1` `): ` ` ` `count ` `+` `=` `1` ` ` ` ` `return` `count ` ` ` `# Driver Code ` `if` `__name__ ` `=` `=` `'__main__'` `: ` ` ` `a ` `=` `1000` ` ` `b ` `=` `1099` ` ` ` ` `print` `(countUnary(a, b)) ` ` ` `# This code is contributed by ` `# Sanjit_Prasad ` |

## C#

`//C# program to count unary numbers ` `// in a range ` `using` `System; ` ` ` ` ` `public` `class` `GFG { ` ` ` `// Function to check if a number is unary ` `static` `bool` `isUnary(` `int` `n) ` `{ ` ` ` `/// Base case. Note that if we repeat ` ` ` `// above process for 7, we get 1. ` ` ` `if` `(n == 1 || n == 7) ` ` ` `return` `true` `; ` ` ` `else` `if` `(n / 10 == 0) ` ` ` `return` `false` `; ` ` ` ` ` `/// rec case ` ` ` `int` `x, sum = 0; ` ` ` `while` `(n != 0) { ` ` ` `x = n % 10; ` ` ` `sum = sum + x * x; ` ` ` `n = n / 10; ` ` ` `} ` ` ` `return` `isUnary(sum); ` `} ` ` ` `// Function to count unary numbers ` `// in a range ` `static` `int` `countUnary(` `int` `a, ` `int` `b) ` `{ ` ` ` `int` `count = 0; ` ` ` ` ` `for` `(` `int` `i = a; i <= b; i++) { ` ` ` `if` `(isUnary(i) == ` `true` `) ` ` ` `count++; ` ` ` `} ` ` ` ` ` `return` `count; ` `} ` ` ` `// Driver Code ` ` ` ` ` `public` `static` `void` `Main () { ` ` ` ` ` ` ` `int` `a = 1000, b = 1099; ` ` ` `Console.WriteLine(countUnary(a, b)); ` ` ` ` ` `} ` `//This code is contributed by 29AjayKumar ` `} ` |

**Output:**

13

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.