Find Nth number in a sequence which is not a multiple of a given number
Given four integers A, N, L and R, the task is to find the N th number in a sequence of consecutive integers from L to R which is not a multiple of A. It is given that the sequence contain at least N numbers which are not divisible by A and the integer A is always greater than 1.
Examples:
Input: A = 2, N = 3, L = 1, R = 10
Output: 5
Explanation:
The sequence is 1, 2, 3, 4, 5, 6, 7, 8, 9 and 10. Here 5 is the third number which is not a multiple of 2 in the sequence.Input: A = 3, N = 6, L = 4, R = 20
Output: 11
Explanation :
11 is the 6th number which is not a multiple of 3 in the sequence.
Naive Approach: The naive approach is to iterate over the range [L, R] in a loop to find the Nth number. The steps are:
- Initialize the count of non-multiple number and current number to 0.
- Iterate over the range [L, R] until the count of the non-multiple number is not equal to N.
- Increment the count of the non-multiple number by 1, If the current number is not divisible by A.
Below is the implementation of the above approach:
C++
// C++ program for the above approach #include <bits/stdc++.h> using namespace std; // Function to find Nth number not a // multiple of A in the range [L, R] void count_no ( int A, int N, int L, int R) { // To store the count int count = 0; int i = 0; // To check all the nos in range for (i = L; i < R + 1; i++) { if (i % A != 0) count += 1; if (count == N) break ; } cout << i; } // Driver code int main() { // Given values of A, N, L, R int A = 3, N = 6, L = 4, R = 20; // Function Call count_no (A, N, L, R); return 0; } // This code is contributed by mohit kumar 29 |
Java
// Java program for the above approach import java.util.*; import java.io.*; class GFG{ // Function to find Nth number not a // multiple of A in the range [L, R] static void count_no ( int A, int N, int L, int R) { // To store the count int count = 0 ; int i = 0 ; // To check all the nos in range for (i = L; i < R + 1 ; i++) { if (i % A != 0 ) count += 1 ; if (count == N) break ; } System.out.println(i); } // Driver code public static void main(String[] args) { // Given values of A, N, L, R int A = 3 , N = 6 , L = 4 , R = 20 ; // Function call count_no (A, N, L, R); } } // This code is contributed by sanjoy_62 |
Python3
# Python3 program for the above approach # Function to find Nth number not a # multiple of A in the range [L, R] def count_no (A, N, L, R): # To store the count count = 0 # To check all the nos in range for i in range ( L, R + 1 ): if ( i % A ! = 0 ): count + = 1 if ( count = = N ): break print ( i ) # Given values of A, N, L, R A, N, L, R = 3 , 6 , 4 , 20 # Function Call count_no (A, N, L, R) |
C#
// C# program for the above approach using System; class GFG{ // Function to find Nth number not a // multiple of A in the range [L, R] static void count_no ( int A, int N, int L, int R) { // To store the count int count = 0; int i = 0; // To check all the nos in range for (i = L; i < R + 1; i++) { if (i % A != 0) count += 1; if (count == N) break ; } Console.WriteLine(i); } // Driver code public static void Main() { // Given values of A, N, L, R int A = 3, N = 6, L = 4, R = 20; // Function call count_no (A, N, L, R); } } // This code is contributed by sanjoy_62 |
Javascript
<script> // Javascript Program to implement // the above approach // Function to find Nth number not a // multiple of A in the range [L, R] function count_no (A, N, L, R) { // To store the count let count = 0; let i = 0; // To check all the nos in range for (i = L; i < R + 1; i++) { if (i % A != 0) count += 1; if (count == N) break ; } document.write(i); } // Driver Code // Given values of A, N, L, R let A = 3, N = 6, L = 4, R = 20; // Function call count_no (A, N, L, R); // This code is contributed by chinmoy1997pal. </script> |
11
Time Complexity: O(R – L)
Auxiliary Space: O(1)
Efficient Approach:
The key observation is that there are A – 1 numbers that are not divisible by A in the range [1, A – 1]. Similarly, there are A – 1 numbers not divisible by A in range [A + 1, 2 * A – 1], [2 * A + 1, 3 * A – 1] and so on.
With the help of this observation, the Nth number which is not divisible by A will be:
To find the value in the range [ L, R ], we need to shift the origin from ‘0’ to ‘L – 1’, thus we can say that the Nth number which is not divisible by A in the range will be :
However there is an edge case, when the value of ( L – 1 ) + N + floor( ( N – 1 ) / ( A – 1 ) ) itself turns out to be multiple of a ‘A’, in that case Nth number will be :
Below is the implementation of the above approach:
C++
// C++ program for the above approach #include <bits/stdc++.h> using namespace std; // Function to find Nth number // not a multiple of A in range [L, R] void countNo( int A, int N, int L, int R) { // Calculate the Nth no int ans = L - 1 + N + floor ((N - 1) / (A - 1)); // Check for the edge case if (ans % A == 0) { ans = ans + 1; } cout << ans << endl; } // Driver Code int main() { // Input parameters int A = 5, N = 10, L = 4, R = 20; // Function Call countNo(A, N, L, R); return 0; } // This code is contributed by avanitrachhadiya2155 |
Java
// Java program for the above approach import java.io.*; class GFG { // Function to find Nth number // not a multiple of A in range [L, R] static void countNo( int A, int N, int L, int R) { // Calculate the Nth no int ans = L - 1 + N + ( int )Math.floor((N - 1 ) / (A - 1 )); // Check for the edge case if (ans % A == 0 ) { ans = ans + 1 ; } System.out.println(ans); } // Driver Code public static void main (String[] args) { // Input parameters int A = 5 , N = 10 , L = 4 , R = 20 ; // Function Call countNo(A, N, L, R); } } // This code is contributed by rag2127 |
Python3
# Python3 program for the above approach import math # Function to find Nth number # not a multiple of A in range [L, R] def countNo (A, N, L, R): # Calculate the Nth no ans = L - 1 + N \ + math.floor( ( N - 1 ) / ( A - 1 ) ) # Check for the edge case if ans % A = = 0 : ans = ans + 1 ; print (ans) # Input parameters A, N, L, R = 5 , 10 , 4 , 20 # Function Call countNo(A, N, L, R) |
C#
// C# program for the above approach using System; class GFG { // Function to find Nth number // not a multiple of A in range [L, R] static void countNo( int A, int N, int L, int R) { // Calculate the Nth no int ans = L - 1 + N + ((N - 1) / (A - 1)); // Check for the edge case if (ans % A == 0) { ans = ans + 1; } Console.WriteLine(ans); } // Driver code static void Main() { // Input parameters int A = 5, N = 10, L = 4, R = 20; // Function Call countNo(A, N, L, R); } } // This code is contributed by divyesh072019. |
Javascript
<script> // Javascript program for // the above approach // Function to find Nth number // not a multiple of A in range [L, R] function countNo(A, N, L, R) { // Calculate the Nth no var ans = L - 1 + N + Math.floor((N - 1) / (A - 1)); // Check for the edge case if (ans % A == 0) { ans = ans + 1; } document.write(ans); } // Driver code // Input parameters var A = 5, N = 10, L = 4, R = 20; // Function Call countNo(A, N, L, R); // This code is contributed by Khushboogoyal499 </script> |
16
Time Complexity: O(1)
Auxiliary Space: O(1)
Please Login to comment...