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

## Javascript

`<script>` ` ` `// Javascript program to count unary` ` ` `// numbers in a range` ` ` ` ` `// Function to check if a number is unary` ` ` `function` `isUnary(n)` ` ` `{` ` ` `/// Base case. Note that if we repeat` ` ` `// above process for 7, we get 1.` ` ` `if` `(n == 1 || n == 7)` ` ` `return` `true` `;` ` ` `else` `if` `(parseInt(n / 10, 10) == 0)` ` ` `return` `false` `;` ` ` `/// rec case` ` ` `let x, sum = 0;` ` ` `while` `(n != 0) {` ` ` `x = n % 10;` ` ` `sum = sum + x * x;` ` ` `n = parseInt(n / 10, 10);` ` ` `}` ` ` `return` `isUnary(sum);` ` ` `}` ` ` `// Function to count unary numbers` ` ` `// in a range` ` ` `function` `countUnary(a, b)` ` ` `{` ` ` `let count = 0;` ` ` `for` `(let i = a; i <= b; i++) {` ` ` `if` `(isUnary(i) == ` `true` `)` ` ` `count++;` ` ` `}` ` ` `return` `count;` ` ` `}` ` ` ` ` `let a = 1000, b = 1099;` ` ` `document.write(countUnary(a, b));` ` ` `</script>` |

**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. To complete your preparation from learning a language to DS Algo and many more, please refer **Complete Interview Preparation Course****.**

In case you wish to attend live classes with industry experts, please refer **DSA Live Classes**