Find Nth positive number whose digital root is X
Last Updated :
22 Jun, 2022
Given a number X ( 1<= X <= 9) and a positive number N, find the Nth positive number whose digital root is X.
Digital Root: The digital root of a positive number is obtained by iteratively summing up the digits of a number. On each iteration, the number is replaced by the sum of its digit and the iteration stops when the number is reduced to a single digit number. This single digit number is known as the digital root. For example, the digital root of 65 is 2, because 6 + 5 = 11 and 1 + 1 = 2.
Examples:
Input : X = 3, N = 100
Output : 894
The N-th Number whose digit root is X is 894
Input : X = 7, N = 43
Output : 385
Simple Method: The simple method is to start from 1 and calculate the digital root of every number, whenever we come across a number whose digital root is equal to X, we increase our counter by 1. We will stop our search when our counter is equal to N.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int findDigitalRoot( int num)
{
int sum = INT_MAX, tempNum = num;
while (sum >= 10) {
sum = 0;
while (tempNum > 0) {
sum += tempNum % 10;
tempNum /= 10;
}
tempNum = sum;
}
return sum;
}
void findAnswer( int X, int N)
{
int counter = 0;
for ( int i = 1; counter < N; ++i) {
int digitalRoot = findDigitalRoot(i);
if (digitalRoot == X) {
++counter;
}
if (counter == N) {
cout << i;
break ;
}
}
}
int main()
{
int X = 1, N = 3;
findAnswer(X, N);
return 0;
}
|
Java
class GFG
{
static int findDigitalRoot( int num)
{
int sum = Integer.MAX_VALUE, tempNum = num;
while (sum >= 10 )
{
sum = 0 ;
while (tempNum > 0 )
{
sum += tempNum % 10 ;
tempNum /= 10 ;
}
tempNum = sum;
}
return sum;
}
static void findAnswer( int X, int N)
{
int counter = 0 ;
for ( int i = 1 ; counter < N; ++i)
{
int digitalRoot = findDigitalRoot(i);
if (digitalRoot == X)
{
++counter;
}
if (counter == N)
{
System.out.print( i);
break ;
}
}
}
public static void main(String args[])
{
int X = 1 , N = 3 ;
findAnswer(X, N);
}
}
|
Python3
import sys
def findDigitalRoot(num):
sum = sys.maxsize;
tempNum = num;
while ( sum > = 10 ):
sum = 0 ;
while (tempNum > 0 ):
sum + = tempNum % 10 ;
tempNum / / = 10 ;
tempNum = sum ;
return sum ;
def findAnswer(X, N):
counter = 0 ;
i = 0 ;
while (counter < N):
i + = 1 ;
digitalRoot = findDigitalRoot(i);
if (digitalRoot = = X):
counter + = 1 ;
if (counter = = N):
print (i);
break ;
if __name__ = = '__main__' :
X = 1 ;
N = 3 ;
findAnswer(X, N);
|
C#
using System;
class GFG
{
static int findDigitalRoot( int num)
{
int sum = int .MaxValue, tempNum = num;
while (sum >= 10)
{
sum = 0;
while (tempNum > 0)
{
sum += tempNum % 10;
tempNum /= 10;
}
tempNum = sum;
}
return sum;
}
static void findAnswer( int X, int N)
{
int counter = 0;
for ( int i = 1; counter < N; ++i)
{
int digitalRoot = findDigitalRoot(i);
if (digitalRoot == X)
{
++counter;
}
if (counter == N)
{
Console.Write( i);
break ;
}
}
}
public static void Main(String []args)
{
int X = 1, N = 3;
findAnswer(X, N);
}
}
|
PHP
<?php
function findDigitalRoot( $num )
{
$sum = PHP_INT_MAX;
$tempNum = $num ;
while ( $sum >= 10)
{
$sum = 0;
while ( $tempNum > 0)
{
$sum += $tempNum % 10;
$tempNum /= 10;
}
$tempNum = $sum ;
}
return $sum ;
}
function findAnswer( $X , $N )
{
$counter = 0;
for ( $i = 1; $counter < $N ; ++ $i )
{
$digitalRoot = findDigitalRoot( $i );
if ( $digitalRoot == $X )
{
++ $counter ;
}
if ( $counter == $N )
{
echo ( $i );
break ;
}
}
}
$X = 1; $N = 3;
findAnswer( $X , $N );
|
Javascript
<script>
function findDigitalRoot(num) {
var sum = Number.MAX_VALUE, tempNum = num;
while (sum >= 10) {
sum = 0;
while (tempNum > 0) {
sum += tempNum % 10;
tempNum = parseInt(tempNum/10);
}
tempNum = sum;
}
return sum;
}
function findAnswer(X , N) {
var counter = 0;
for ( var i = 1; counter < N; ++i) {
var digitalRoot = findDigitalRoot(i);
if (digitalRoot == X) {
counter+=1;
}
if (counter == N) {
document.write(i);
break ;
}
}
}
var X = 1, N = 3;
findAnswer(X, N);
</script>
|
Efficient Approach: We can find digital root of a number K directly using the formula:
digitalRoot(k) = (k - 1)mod 9 +1
From this we can find the N-th number whose digital root is K as,
Nth number = (N - 1)*9 + K
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int findAnswer( int X, int N)
{
return (N - 1) * 9 + X;
}
int main()
{
int X = 7, N = 43;
cout << findAnswer(X, N);
return 0;
}
|
Java
class GfG
{
static int findAnswer( int X, int N)
{
return (N - 1 ) * 9 + X;
}
public static void main(String[] args)
{
int X = 7 , N = 43 ;
System.out.println(findAnswer(X, N));
}
}
|
Python3
def findAnswer(X, N):
return (N - 1 ) * 9 + X;
X = 7 ;
N = 43 ;
print (findAnswer(X, N));
|
C#
using System;
class GFG
{
static int findAnswer( int X, int N)
{
return (N - 1) * 9 + X;
}
public static void Main()
{
int X = 7, N = 43;
Console.WriteLine(findAnswer(X, N));
}
}
|
PHP
<?php
function findAnswer( $X , $N )
{
return ( $N - 1) * 9 + $X ;
}
$X = 7; $N = 43;
echo (findAnswer( $X , $N ));
?>
|
Javascript
<script>
function findAnswer(X, N)
{
return (N - 1) * 9 + X;
}
let X = 7;
let N = 43;
document.write(findAnswer(X, N));
</script>
|
Time Complexity: O(1)
Auxiliary Space: O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...