Given an integer N, the task is to find any N-digit positive number (except for zeros) such that it is not divisible by any of its digits. If it is not possible to find any such number then print -1.
Note: There can be more than one such number for the same N-digit.
Examples:
Input: N = 2
Output: 23
23 is not divisible by 2 or 3Input: N = 3
Output: 239
Approach:
The easiest solution to this problem can be thought of with the help of digits ‘4’ and ‘5’.
- Since, in order for a number to be divisible by 5, the number must end with 0 or 5; and in order for it to be divisible by 4, the last two digits if the number must be divisible by 4.
- Therefore, a shortcut method can be applied to prevent both of the divisibility criteria of 4 and as well as of 5, as:
- To prevent a number from being divisible by 5, the number can contain 5 for every other digit except for last digit.
Therefore for N digit number, (N - 1) digits must be 5 = 5555...(N-1 times)d where d is the Nth digit
- To prevent a number from being divisible by 4, the number can contain 5 at the second last digit and 4 at the last digit.
Therefore for N digit number, Last digit must be 4 = 5555...(N-1 times)4
Below is the implementation of the above approach:
// CPP program to find N digit number such // that it is not divisible by any of its digits #include <bits/stdc++.h> using namespace std;
// Function that print the answer void findTheNumber( int n)
{ // if n == 1 then it is
// not possible
if (n == 1) {
cout << "Impossible" << endl;
return ;
}
// loop to n-1 times
for ( int i = 0; i < n - 1; i++) {
cout << "5" ;
}
// print 4 as last digit of
// the number
cout << "4" ;
} // Driver code int main()
{ int n = 12;
// Function call
findTheNumber(n);
return 0;
} |
// JAVA program to find N digit number such // that it is not divisible by any of its digits import java.io.*;
public class GFG{
// Function that print the answer static void findTheNumber( int n)
{ // if n == 1 then it is
// not possible
if (n == 1 ) {
System.out.print( "Impossible" + "\n" );
return ;
}
// loop to n-1 times
for ( int i = 0 ; i < n - 1 ; i++) {
System.out.print( "5" );
}
// print 4 as last digit of
// the number
System.out.print( "4" );
} // Driver code public static void main(String[] args)
{ int n = 12 ;
// Function call
findTheNumber(n);
} } // This code is contributed by 29AjayKumar |
# Python3 program to find N digit number such # that it is not divisible by any of its digits # Function that print answer def findTheNumber(n):
# if n == 1 then it is
# not possible
if (n = = 1 ):
print ( "Impossible" )
return
# loop to n-1 times
for i in range (n - 1 ):
print ( "5" ,end = "")
# print as last digit of
# the number
print ( "4" )
# Driver code if __name__ = = '__main__' :
n = 12
#Function call
findTheNumber(n)
# This code is contributed by mohit kumar 29 |
// C# program to find N digit number such // that it is not divisible by any of its digits using System;
class GFG{
// Function that print the answer static void findTheNumber( int n)
{ // if n == 1 then it is
// not possible
if (n == 1) {
Console.Write( "Impossible" + "\n" );
return ;
}
// loop to n-1 times
for ( int i = 0; i < n - 1; i++) {
Console.Write( "5" );
}
// print 4 as last digit of
// the number
Console.Write( "4" );
} // Driver code public static void Main(String[] args)
{ int n = 12;
// Function call
findTheNumber(n);
} } // This code is contributed by 29AjayKumar |
<script> // Javascript program to find N digit number such // that it is not divisible by any of its digits // Function that print the answer function findTheNumber(n)
{ // if n == 1 then it is
// not possible
if (n == 1) {
document.write( "Impossible" );
return ;
}
// loop to n-1 times
for ( var i = 0; i < n - 1; i++) {
document.write( "5" );
}
// print 4 as last digit of
// the number
document.write( "4" );
} // Driver code var n = 12;
// Function call findTheNumber(n); // This code is contributed by rutvik_56. </script> |
555555555554
Time complexity: O(N), where N is the required size of the number.
Auxiliary Space: O(1), as constant space is required.
Optimized Approach:
Here are some optimizations you can make to the code:
- Remove unnecessary header file: You don’t need to include the entire “bits/stdc++.h” header file. You can replace it with the specific header files that you need, which in this case are <iostream> and <string>.
- Use a string instead of cout: Instead of printing the number digit by digit, you can create a string variable to store the number and then print the whole string at once.
- Use a single loop: You can combine the two loops in the original code into a single loop that generates the number digit by digit.
Here’s the optimized code:
#include <iostream> #include <string> using namespace std;
// Function that generates the number void findTheNumber( int n)
{ // if n == 1 then it is not possible
if (n == 1) {
cout << "Impossible" << endl;
return ;
}
string number(n-1, '5' ); // create a string of n-1 '5's
number += '4' ; // append a '4' to the end
cout << number << endl; // print the whole number
} // Driver code int main()
{ int n = 12;
// Function call
findTheNumber(n);
return 0;
} //this code is contributed by KaranKumar |
/*package whatever //do not write package name here */ import java.util.Scanner;
public class Main {
public static void findTheNumber( int n) {
// if n == 1 then it is not possible
if (n == 1 ) {
System.out.println( "Impossible" );
return ;
}
StringBuilder number = new StringBuilder();
for ( int i = 0 ; i < n - 1 ; i++) {
number.append( "5" );
}
number.append( "4" );
System.out.println(number.toString());
}
public static void main(String[] args) {
int n = 12 ;
// Function call
findTheNumber(n);
}
} |
def findTheNumber(n):
# if n == 1 then it is not possible
if n = = 1 :
print ( "Impossible" )
return
number = "5" * (n - 1 ) + "4"
print (number)
# Driver code n = 12
# Function call findTheNumber(n) |
using System;
public class MainClass {
public static void FindTheNumber( int n) {
// if n == 1 then it is not possible
if (n == 1) {
Console.WriteLine( "Impossible" );
return ;
}
string number = "" ;
for ( int i = 0; i < n - 1; i++) {
number += "5" ;
}
number += "4" ;
Console.WriteLine(number);
}
public static void Main( string [] args) {
int n = 12;
// Function call
FindTheNumber(n);
}
} |
function findTheNumber(n) {
// if n == 1 then it is not possible
if (n == 1) {
console.log( "Impossible" );
return ;
}
let number = "5" .repeat(n - 1) + "4" ;
console.log(number);
} // Driver code let n = 12; // Function call findTheNumber(n); |
555555555554
Time complexity: O(N), where N is the required size of the number.
Auxiliary Space: O(1), as constant space is required.