Find two numbers made up of a given digit such that their difference is divisible by N
Last Updated :
20 Jul, 2021
Given two numbers, N and M, the task is to find two numbers made up of M as all its digits such that their difference is divisible by N.
Examples:
Input: N = 8, M = 2
Output: 22 222
Explanation: The difference between 222 and 22 (200) is divisible by 8
Input: N = 17, M = 6
Output: 6 66666666666666666
Approach:
In this problem, we have to find numbers consisting of only one unique digit. Let’s say M is equal to 2, then we have to find A and B from numbers like 2, 22, 222, 2222 …so on. The difference between A and B should be divisible by N. For this condition to satisfy, we have to pick A and B such that the remainder of A and B when it is divided by N, is the same.
For a digit of length N+1 length, consisting of only one unique digit M, we will have N+1 numbers. If we divide these N+1 numbers by N we will have N+1 remainders which will range from [0, N]. Since the numbers can exceed the range of integer values, we are storing remainder-length of the number as key-value pairings in a Map. Once a remainder occurs with a value already paired in the Map, the current length and the mapped lengths are the lengths of the desired numbers.
The below code is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void findNumbers( int N, int M)
{
int m = M;
map< int , int > remLen;
int len, remainder;
for (len = 1; len <= N + 1; ++len) {
remainder = M % N;
if (remLen.find(remainder)
== remLen.end())
remLen[remainder] = len;
else
break ;
M = M * 10 + m;
M = M % N;
}
int LenA = len;
int LenB = remLen[remainder];
for ( int i = 0; i < LenB; ++i)
cout << m;
cout << " " ;
for ( int i = 0; i < LenA; ++i)
cout << m;
return ;
}
int main()
{
int N = 8, M = 2;
findNumbers(N, M);
return 0;
}
|
Java
import java.util.*;
class GFG{
static void findNumbers( int N, int M)
{
int m = M;
Map<Integer, Integer> remLen = new HashMap<>();
int len, remainder = 0 ;
for (len = 1 ; len <= N + 1 ; ++len)
{
remainder = M % N;
if (!remLen.containsKey(remainder))
{
remLen.put(remainder, len);
}
else
{
break ;
}
M = M * 10 + m;
M = M % N;
}
int LenA = len;
int LenB = remLen.getOrDefault(remainder, 0 );
for ( int i = 0 ; i < LenB; ++i)
System.out.print(m);
System.out.print( " " );
for ( int i = 0 ; i < LenA; ++i)
System.out.print(m);
}
public static void main(String[] args)
{
int N = 8 , M = 2 ;
findNumbers(N, M);
}
}
|
Python3
def findNumbers(N, M):
m = M
remLen = {}
for len1 in range ( 1 , N + 1 , 1 ):
remainder = M % N
if (remLen.get(remainder) = = None ):
remLen[remainder] = len1
else :
break
M = M * 10 + m
M = M % N
LenA = len1
LenB = remLen[remainder]
for i in range (LenB):
print (m, end = "")
print ( " " , end = "")
for i in range (LenA):
print (m, end = "")
return
if __name__ = = '__main__' :
N = 8
M = 2
findNumbers(N, M)
|
C#
using System;
using System.Collections.Generic;
class GFG{
static void findNumbers( int N, int M)
{
int m = M;
Dictionary< int ,
int > remLen = new Dictionary< int ,
int >();
int len, remainder = 0;
for (len = 1; len <= N + 1; ++len)
{
remainder = M % N;
if (!remLen.ContainsKey(remainder))
{
remLen.Add(remainder, len);
}
else
{
break ;
}
M = M * 10 + m;
M = M % N;
}
int LenA = len;
int LenB = remLen[remainder];
for ( int i = 0; i < LenB; ++i)
Console.Write(m);
Console.Write( " " );
for ( int i = 0; i < LenA; ++i)
Console.Write(m);
}
public static void Main(String[] args)
{
int N = 8, M = 2;
findNumbers(N, M);
}
}
|
Javascript
<script>
function findNumbers(N, M)
{
let m = M;
let remLen = new Map();
let len, remainder = 0;
for (len = 1; len <= N + 1; ++len)
{
remainder = M % N;
if (!remLen.has(remainder))
{
remLen.set(remainder, len);
}
else
{
break ;
}
M = M * 10 + m;
M = M % N;
}
let LenA = len;
let LenB = remLen.get(remainder);
for (let i = 0; i < LenB; ++i)
document.write(m);
document.write( " " );
for (let i = 0; i < LenA; ++i)
document.write(m);
}
let N = 8, M = 2;
findNumbers(N, M);
</script>
|
Time Complexity: O(N)
Auxiliary Space: O(1)
Share your thoughts in the comments
Please Login to comment...