# Find numbers from 1 to N with exactly 3 divisors

• Difficulty Level : Medium
• Last Updated : 13 Sep, 2022

Given a number N, print all numbers in the range from 1 to N having exactly 3 divisors.

Examples:

Input: N = 16
Output: 4 9
Explanation: 4 and 9 have exactly three divisors.

Input: N = 49
Output: 4 9 25 49
Explanation: 4, 9, 25 and 49 have exactly three divisors.

Recommended Practice

## Mathematical approach to find Numbers with exactly 3 divisors:

To solve the problem follow the below idea:

Idea: After having a close look at the examples mentioned above, you have noticed that all the required numbers are perfect squares and that too of only prime numbers.

Proof: Suppose the numbse is N, and it is a perfect square with square root X such that X is prime.

Now if we find the factors of N, it will always have following combinations:

• 1*N
• X*X

Therefore the required numbers will have only three numbers as their divisors:

• 1,
• that number itself, and
• just a single divisor in between 1 and the number.

Algorithm: We can generate all primes within a set using any sieve method efficiently and then we should take all primes i, such that i*i <=N

Follow the below steps to solve the problem:

• Generate the prime numbers from 1 to N using any sieve method efficiently
• Print all the prime numbers(X) between 1 to N, such as X2 is less than or equal to N

Below is the implementation of the above approach:

## C++

 `// C++ program to print all` `// three-primes smaller than` `// or equal to N using Sieve` `// of Eratosthenes` `#include ` `using` `namespace` `std;`   `// Generates all primes upto N and` `// prints their squares` `void` `numbersWith3Divisors(``int` `N)` `{` `    ``bool` `prime[N + 1];` `    ``memset``(prime, ``true``, ``sizeof``(prime));` `    ``prime = prime = 0;`   `    ``for` `(``int` `p = 2; p * p <= N; p++) {` `        ``// If prime[p] is not changed,` `        ``// then it is a prime` `        ``if` `(prime[p] == ``true``) {` `            ``// Update all multiples of p` `            ``for` `(``int` `i = p * 2; i <= N; i += p)` `                ``prime[i] = ``false``;` `        ``}` `    ``}`   `    ``// Print squares of primes upto n.` `    ``cout << ``"Numbers with 3 divisors :\n"``;` `    ``for` `(``int` `i = 0; i * i <= N; i++)` `        ``if` `(prime[i])` `            ``cout << i * i << ``" "``;` `}`   `// Driver code` `int` `main()` `{` `    ``int` `N = 96;`   `    ``// Function call` `    ``numbersWith3Divisors(N);`   `    ``return` `0;` `}`

## Java

 `// Java program to print all` `// three-primes smaller than` `// or equal to N using Sieve` `// of Eratosthenes` `import` `java.io.*;` `import` `java.util.*;`   `class` `GFG {`   `    ``// Generates all primes upto N` `    ``// and prints their squares` `    ``static` `void` `numbersWith3Divisors(``int` `N)` `    ``{` `        ``boolean``[] prime = ``new` `boolean``[N + ``1``];` `        ``Arrays.fill(prime, ``true``);` `        ``prime[``0``] = prime[``1``] = ``false``;`   `        ``for` `(``int` `p = ``2``; p * p <= N; p++) {`   `            ``// If prime[p] is not changed,` `            ``// then it is a prime` `            ``if` `(prime[p] == ``true``) {` `                ``// Update all multiples of p` `                ``for` `(``int` `i = p * ``2``; i <= N; i += p)` `                    ``prime[i] = ``false``;` `            ``}` `        ``}`   `        ``// print squares of primes upto n` `        ``System.out.println(``"Numbers with 3 divisors : "``);` `        ``for` `(``int` `i = ``0``; i * i <= N; i++)` `            ``if` `(prime[i])` `                ``System.out.print(i * i + ``" "``);` `    ``}`   `    ``// Driver code` `    ``public` `static` `void` `main(String[] args)` `    ``{` `        ``int` `N = ``96``;`   `        ``// Function call` `        ``numbersWith3Divisors(N);` `    ``}` `}`   `// Contributed by Pramod Kumar`

## Python3

 `# Python3 program to print` `# all three-primes smaller than` `# or equal to n using Sieve` `# of Eratosthenes`   `# Generates all primes upto n` `# and prints their squares`     `def` `numbersWith3Divisors(N):`   `    ``prime ``=` `[``True``]``*``(N``+``1``)` `    ``prime[``0``] ``=` `prime[``1``] ``=` `False` `    ``p ``=` `2` `    ``while` `(p``*``p <``=` `N):`   `        ``# If prime[p] is not changed,` `        ``# then it is a prime` `        ``if` `(prime[p] ``=``=` `True``):`   `            ``# Update all multiples of p` `            ``for` `i ``in` `range``(p``*``2``, N``+``1``, p):` `                ``prime[i] ``=` `False` `        ``p ``+``=` `1`   `    ``# print squares of primes upto n.` `    ``print``(``"Numbers with 3 divisors :"``)` `    ``i ``=` `0` `    ``while` `(i``*``i <``=` `N):` `        ``if` `(prime[i]):` `            ``print``(i``*``i, end``=``" "``)` `        ``i ``+``=` `1`     `# Driver code` `if` `__name__ ``=``=` `"__main__"``:` `    ``N ``=` `96`   `    ``# Function call` `    ``numbersWith3Divisors(N)`   `# This code is contributed by mits`

## C#

 `// C# program to print all` `// three-primes smaller than` `// or equal to n using Sieve` `// of Eratosthenes`   `class` `GFG {`   `    ``// Generates all primes upto n` `    ``// and prints their squares` `    ``static` `void` `numbersWith3Divisors(``int` `N)` `    ``{` `        ``bool``[] prime = ``new` `bool``[N + 1];` `        ``prime = prime = ``true``;`   `        ``for` `(``int` `p = 2; p * p <= N; p++) {`   `            ``// If prime[p] is not changed,` `            ``// then it is a prime` `            ``if` `(prime[p] == ``false``) {` `                ``// Update all multiples of p` `                ``for` `(``int` `i = p * 2; i <= N; i += p)` `                    ``prime[i] = ``true``;` `            ``}` `        ``}`   `        ``// print squares of primes upto n` `        ``System.Console.WriteLine(` `            ``"Numbers with 3 divisors : "``);` `        ``for` `(``int` `i = 0; i * i <= N; i++)` `            ``if` `(!prime[i])` `                ``System.Console.Write(i * i + ``" "``);` `    ``}`   `    ``// Driver code` `    ``public` `static` `void` `Main()` `    ``{` `        ``int` `N = 96;`   `        ``// Function call` `        ``numbersWith3Divisors(N);` `    ``}` `}`   `// This code is Contributed by mits`

## PHP

 ``

## Javascript

 `// Javascript program to print all` `    ``// three-primes smaller than` `    ``// or equal to n using Sieve` `    ``// of Eratosthenes` `    `  `    ``// Generates all primes upto n and` `    ``// prints their squares` `    ``function` `numbersWith3Divisors(n)` `    ``{` `        ``let prime = ``new` `Array(n+1);` `        ``prime.fill(``true``);` `        ``prime = prime = 0;`   `        ``for` `(let p = 2; p*p <= n; p++)` `        ``{` `            ``// If prime[p] is not changed,` `            ``// then it is a prime` `            ``if` `(prime[p] == ``true``)` `            ``{` `               ``// Update all multiples of p` `               ``for` `(let i = p*2; i <= n; i += p)` `                  ``prime[i] = ``false``;` `            ``}` `        ``}`   `        ``// print squares of primes upto n.` `        ``document.write(``"Numbers with 3 divisors :"` `+ ``"
"``);` `        ``for` `(let i = 0;  i*i <= n ; i++)` `            ``if` `(prime[i])` `              ``document.write(i*i + ``" "``);` `    ``}`   `    ``// sieve();` `    ``let n = 96;` `    ``numbersWith3Divisors(n);` `    `  `     ``// This code is contributed by mukesh07.`

Output

```Numbers with 3 divisors :
4 9 25 49 ```

Time Complexity: O(sqrt N)
Auxiliary Space: O(N)

## Numbers with exactly 3 divisors using constant space:

Run a loop from 2 to sqrt(N) and check if the current element is prime or not, if it is so then print that number, but this method will increase the time complexity of the solution

Follow the below steps to solve the problem:

• Start a loop for integer i from 2 to N.
• Check if i is prime or not, which can be done easily using the isPrime(n) method.
• If i is prime, check if its square is less than or equal to the given number. This will be reviewed only for squares of prime numbers, therefore reducing the number of checks.
• If the above condition is satisfied, the number will be printed and the loop will continue till i <= n.

Below is the implementation of the above approach:

## C++

 `// C++ program to print all` `// three-primes smaller than` `// or equal to n without using` `// extra space` `#include ` `using` `namespace` `std;`   `void` `numbersWith3Divisors(``int``);` `bool` `isPrime(``int``);`   `// Generates all primes upto n and` `// prints their squares` `void` `numbersWith3Divisors(``int` `N)` `{` `    ``cout << ``"Numbers with 3 divisors : "` `<< endl;`   `    ``for` `(``int` `i = 2; i * i <= N; i++) {`   `        ``// Check prime` `        ``if` `(isPrime(i)) {` `            ``if` `(i * i <= N) {`   `                ``// Print numbers in` `                ``// the order of` `                ``// occurrence` `                ``cout << i * i << ``" "``;` `            ``}` `        ``}` `    ``}` `}`   `// Check if a number is prime or not` `bool` `isPrime(``int` `N)` `{` `    ``for` `(``int` `i = 2; i * i <= N; i++) {` `        ``if` `(N % i == 0)` `            ``return` `false``;` `    ``}` `    ``return` `true``;` `}`   `// Driver code` `int` `main()` `{` `    ``int` `N = 122;`   `    ``// Function call` `    ``numbersWith3Divisors(N);`   `    ``return` `0;` `}`   `// This code is contributed by vishu2908`

## Java

 `// Java program to print all` `// three-primes smaller than` `// or equal to N without using` `// extra space` `import` `java.util.*;`   `class` `GFG {`   `    ``// 3 divisor logic implementation` `    ``// check if a number is` `    ``// prime or not` `    ``// if it is a prime then` `    ``// check if its square` `    ``// is less than or equal to` `    ``// the given number` `    ``static` `void` `numbersWith3Divisors(``int` `N)` `    ``{` `        ``System.out.println(``"Numbers with 3 divisors : "``);`   `        ``for` `(``int` `i = ``2``; i * i <= N; i++) {`   `            ``// Check prime` `            ``if` `(isPrime(i)) {` `                ``if` `(i * i <= N) {`   `                    ``// Print numbers in` `                    ``// the order of` `                    ``// occurrence` `                    ``System.out.print(i * i + ``" "``);` `                ``}` `            ``}` `        ``}` `    ``}`   `    ``// Check if a number is prime or not` `    ``public` `static` `boolean` `isPrime(``int` `N)` `    ``{` `        ``for` `(``int` `i = ``2``; i * i <= N; i++) {` `            ``if` `(N % i == ``0``)` `                ``return` `false``;` `        ``}` `        ``return` `true``;` `    ``}`   `    ``// Driver code` `    ``public` `static` `void` `main(String[] args)` `    ``{` `        ``int` `N = ``122``;`   `        ``// Function call` `        ``numbersWith3Divisors(N);` `    ``}` `}`   `// Contributed by Parag Pallav Singh`

## Python3

 `# Python3 program to print all` `# three-primes smaller than` `# or equal to N without using` `# extra space`   `# 3 divisor logic implementation` `# check if a number is  prime or` `# not if it is a prime then check` `# if its square is less than or` `# equal to the given number`     `def` `numbersWith3Divisors(N):`   `    ``print``(``"Numbers with 3 divisors : "``)`   `    ``i ``=` `2` `    ``while` `i ``*` `i <``=` `N:`   `        ``# Check prime` `        ``if` `(isPrime(i)):` `            ``if` `(i ``*` `i <``=` `N):`   `                ``# Print numbers in the order` `                ``# of occurrence` `                ``print``(i ``*` `i, end``=``" "``)`   `        ``i ``+``=` `1`   `# Check if a number is prime or not`     `def` `isPrime(N):`   `    ``i ``=` `2` `    ``while` `i ``*` `i <``=` `N:` `        ``if` `N ``%` `i ``=``=` `0``:` `            ``return` `False`   `        ``i ``+``=` `1`   `    ``return` `True`     `# Driver code` `if` `__name__ ``=``=` `"__main__"``:` `    ``N ``=` `122`   `    ``# Function call` `    ``numbersWith3Divisors(N)`   `# This code is contributed by divyesh072019`

## C#

 `// C# program to print all` `// three-primes smaller than` `// or equal to N without using` `// extra space` `using` `System;`   `class` `GFG {`   `    ``// 3 divisor logic implementation` `    ``// check if a number is prime or` `    ``// not if it is a prime then check` `    ``// if its square is less than or` `    ``// equal to the given number` `    ``static` `void` `numbersWith3Divisors(``int` `N)` `    ``{` `        ``Console.WriteLine(``"Numbers with 3 divisors : "``);`   `        ``for` `(``int` `i = 2; i * i <= N; i++) {`   `            ``// Check prime` `            ``if` `(isPrime(i)) {` `                ``if` `(i * i <= N) {`   `                    ``// Print numbers in the order` `                    ``// of occurrence` `                    ``Console.Write(i * i + ``" "``);` `                ``}` `            ``}` `        ``}` `    ``}`   `    ``// Check if a number is prime or not` `    ``public` `static` `bool` `isPrime(``int` `N)` `    ``{` `        ``for` `(``int` `i = 2; i * i <= N; i++) {` `            ``if` `(N % i == 0)` `                ``return` `false``;` `        ``}` `        ``return` `true``;` `    ``}`   `    ``// Driver code` `    ``static` `void` `Main()` `    ``{` `        ``int` `N = 122;`   `        ``// Function call` `        ``numbersWith3Divisors(N);` `    ``}` `}`   `// This code is contributed by divyeshrabadiya07`

## Javascript

 `// Javascript program to print all` `    ``// three-primes smaller than` `    ``// or equal to n without using` `    ``// extra space` `    `  `      ``// 3 divisor logic implementation` `    ``// check if a number is prime or` `    ``// not if it is a prime then check` `    ``// if its square is less than or` `    ``// equal to the given number` `    ``function` `numbersWith3Divisors(n)` `    ``{` `        ``document.write(``"Numbers with 3 divisors : "``);`   `        ``for``(let i = 2; i * i <= n; i++)` `        ``{`   `            ``// Check prime` `            ``if` `(isPrime(i))` `            ``{` `                ``if` `(i * i <= n)` `                ``{`   `                    ``// Print numbers in the order` `                    ``// of occurrence` `                    ``document.write(i * i + ``" "``);` `                ``}` `            ``}` `        ``}` `    ``}`   `    ``// Check if a number is prime or not` `    ``function` `isPrime(n)` `    ``{` `        ``if` `(n == 0 || n == 1)` `            ``return` `false``;`   `        ``for``(let i = 2; i * i <= n; i++)` `        ``{` `            ``if` `(n % i == 0)` `                ``return` `false``;` `        ``}` `        ``return` `true``;` `    ``}` `    `  `    ``let n = 122;` `     `  `    ``numbersWith3Divisors(n);`   `// This code is contributed by suresh07.`

Output

```Numbers with 3 divisors :
4 9 25 49 121 ```

Time Complexity: O(sqrt N2)
Auxiliary Space: O(1)

This article is contributed by Shivam Pradhan (anuj_charm). 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 if you want to share more information about the topic discussed above.

My Personal Notes arrow_drop_up
Recommended Articles
Page :