Count of numbers satisfying m + sum(m) + sum(sum(m)) = N
Given an integer N, find out the count of numbers(m) that satisfy the condition m + sum(m) + sum (sum(m)) = N, where sum(m) denotes the sum of digits in m. Given N <= 10e9.
Examples:
Input: 9 Output: 1 Explanation: Only 1 positive integer satisfies the condition that is 3, 3 + sum(3) + sum(sum(3)) = 3 + 3 + 3 = 9 Input: 9939 Output: 4 Explanation: m can be 9898, 9907, 9910 and 9913. 9898 + sum(9898) + sum(sum(9898)) = 9898 + 34 + 7 = 9939. 9907 + sum(9907) + sum(sum(9907)) = 9907 + 25 + 7 = 9939. 9910 + sum(9910) + sum(sum(9910)) = 9910 + 19 + 10 = 9939. 9913 + sum(9913) + sum(sum(9913)) = 9913 + 22 + 4 = 9939.
Approach: The first thing to note is that we are given the constraint N<=10e9. This means sum(x) can at maximum be 81 for any number, This is because the largest number below 10e9 is 999999999 whose digits add up to 81. The maximum case for sum(sum(x)) will be 16 (number being 79<=81), so at max it 81 + 16 which is 97 needs to be checked. We just need to iterate from N – 97 to N and check which integers satisfy the equation because no integer smaller than N-97 can satisfy the equation and neither can any integer greater than N can.
Below is the implementation of the above approach.
C++
// CPP program to count numbers // satisfying equation. #include <bits/stdc++.h> using namespace std; // function that returns sum of // digits in a number int sum( int n) { int rem = 0; // initially sum of digits is 0 int sum_of_digits = 0; // loop runs till all digits // have been extracted while (n > 0) { // last digit from backside rem = n % 10; // sums up the digits sum_of_digits += rem; // the number is reduced to the // number removing the last digit n = n / 10; } // returns the sum of digits in a number return sum_of_digits; } // function to calculate the count of // such occurrences int count( int n) { // counter to calculate the occurrences int c = 0; // loop to traverse from n-97 to n for ( int i = n - 97; i <= n; i++) { // calls the function to calculate // the sum of digits of i int a = sum(i); // calls the function to calculate // the sum of digits of a int b = sum(a); // if the summation is equal to n // then increase counter by 1 if ((i + a + b) == n) { c += 1; } } // returns the count return c; } // driver program to test the above function int main() { int n = 9939; // calls the function to get the answer cout << count(n) << endl; return 0; } |
Java
// Java program to count numbers // satisfying equation. import java.io.*; class GFG { // function that returns sum of // digits in a number static int sum( int n) { int rem = 0 ; // initially sum of digits is 0 int sum_of_digits = 0 ; // loop runs till all digits // have been extracted while (n > 0 ) { // last digit from backside rem = n % 10 ; // sums up the digits sum_of_digits += rem; // the number is reduced to the // number removing the last digit n = n / 10 ; } // returns the sum of digits in a number return sum_of_digits; } // function to calculate the count of // such occurrences static int count( int n) { // counter to calculate the occurrences int c = 0 ; // loop to traverse from n-97 to n for ( int i = n - 97 ; i <= n; i++) { // calls the function to calculate // the sum of digits of i int a = sum(i); // calls the function to calculate // the sum of digits of a int b = sum(a); // if the summation is equal to n // then increase counter by 1 if ((i + a + b) == n) { c += 1 ; } } // returns the count return c; } // driver program to test the above function public static void main (String[] args) { int n = 9939 ; // calls the function to get the answer System.out.println ( count(n) ); } } // This article is contributed by vt_m |
Python3
# Python program # to count numbers # satisfying equation. # function that returns sum of # digits in a number def sum (n): rem = 0 #initially sum of digits is 0 sum_of_digits = 0 # loop runs till all digits # have been extracted while (n > 0 ): # last digit from backside rem = n % 10 # sums up the digits sum_of_digits + = rem # the number is reduced to the # number removing the last digit n = n / / 10 # returns the sum # of digits in a number return sum_of_digits # function to calculate # the count of # such occurrences def count(n): # counter to calculate the occurrences c = 0 # loop to traverse from n - 97 to n for i in range (n - 97 ,n + 1 ): # calls the function to calculate # the sum of digits of i a = sum (i) # calls the function to calculate # the sum of digits of a b = sum (a) # if the summation is equal to n # then increase counter by 1 if ((i + a + b) = = n): c + = 1 # returns the count return c # driver program to test # the above function n = 9939 # calls the function # to get the answer print (count(n)) # This code is contributed # by Anant Agarwal. |
C#
// C# program to count numbers // satisfying equation. using System; class GFG { // function that returns sum // of digits in a number static int sum( int n) { int rem = 0; // initially sum of // digits is 0 int sum_of_digits = 0; // loop runs till all digits // have been extracted while (n > 0) { // last digit from // backside rem = n % 10; // sums up the digits sum_of_digits += rem; // the number is reduced // to the number removing // the last digit n = n / 10; } // returns the sum of // digits in a number return sum_of_digits; } // function to calculate the // count of such occurrences static int count( int n) { // counter to calculate // the occurrences int c = 0; // loop to traverse from n-97 to n for ( int i = n - 97; i <= n; i++) { // calls the function to calculate // the sum of digits of i int a = sum(i); // calls the function to calculate // the sum of digits of a int b = sum(a); // if the summation is equal to n // then increase counter by 1 if ((i + a + b) == n) { c += 1; } } // returns the count return c; } // Driver Code public static void Main () { int n = 9939; // calling the function Console.Write ( count(n) ); } } // This code is contributed by Nitin Mittal. |
PHP
<?php // PHP program to count numbers // satisfying equation. // function that returns sum of // digits in a number function sum( $n ) { $rem = 0; // initially sum of // digits is 0 $sum_of_digits = 0; // loop runs till all digits // have been extracted while ( $n > 0) { // last digit from backside $rem = $n % 10; // sums up the digits $sum_of_digits += $rem ; // the number is reduced to the // number removing the last digit $n = $n / 10; } // returns the sum of // digits in a number return $sum_of_digits ; } // function to calculate the // count of such occurrences function countt( $n ) { // counter to calculate // the occurrences $c = 0; // loop to traverse // from n-97 to n for ( $i = $n - 97; $i <= $n ; $i ++) { // calls the function to calculate // the sum of digits of i $a = sum( $i ); // calls the function to calculate // the sum of digits of a $b = sum( $a ); // if the summation is equal to n // then increase counter by 1 if (( $i + $a + $b ) == $n ) { $c += 1; } } // returns the count return $c ; } // Driver Code $n = 9939; // calls the function // to get the answer echo countt( $n ) ; //This code is contributed by nitin mittal. ?> |
Javascript
<script> // javascript program to count numbers // satisfying equation. // function that returns sum of // digits in a number function sum(n) { var rem = 0; // initially sum of digits is 0 var sum_of_digits = 0; // loop runs till all digits // have been extracted while (n > 0) { // last digit from backside rem = n % 10; // sums up the digits sum_of_digits += rem; // the number is reduced to the // number removing the last digit n = parseInt(n / 10); } // returns the sum of digits in a number return sum_of_digits; } // function to calculate the count of // such occurrences function count(n) { // counter to calculate the occurrences var c = 0; // loop to traverse from n-97 to n for (i = n - 97; i <= n; i++) { // calls the function to calculate // the sum of digits of i var a = sum(i); // calls the function to calculate // the sum of digits of a var b = sum(a); // if the summation is equal to n // then increase counter by 1 if ((i + a + b) == n) { c += 1; } } // returns the count return c; } // driver program to test the above function var n = 9939; // calls the function to get the answer document.write(count(n)); // This code is contributed by Rajput-Ji </script> |
Output:
4
Time Complexity: O(log10N+97), as we are using two loops to traverse log10N and 97 times.
Auxiliary Space: O(1), as we are not using any extra space.
This article is contributed by Raja Vikramaditya. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.