Números con exactamente 3 divisores

Dado un número N, imprima todos los números en el rango de 1 a N que tengan exactamente 3 divisores. 

Ejemplos: 

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

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

Después de observar de cerca los ejemplos mencionados anteriormente, notó que todos los números requeridos son cuadrados perfectos y que también son solo números primos. La lógica detrás de esto es que tales números pueden tener solo tres números como su divisor y también eso incluye 1 y ese número en sí mismo resulta en un solo divisor que no es un número, por lo que podemos concluir fácilmente que se requieren esos números que son cuadrados de números primos para que solo puedan tener tres divisores (1, el propio número y sqrt(número)). Entonces todos los primos i, tales que i*i es menor que igual a N son tres números primos. 

Nota: Podemos generar todos los números primos dentro de un conjunto usando cualquier método de tamiz de manera eficiente y luego deberíamos todos los números primos i, de modo que i*i <=N

A continuación se muestra la implementación del enfoque anterior:

C++

// C++ program to print all
// three-primes smaller than
// or equal to n using Sieve
// of Eratosthenes
#include <bits/stdc++.h>
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[0] = prime[1] = 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 program
int main()
{
    // sieve();
    int n = 96;
    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 program
    public static void main (String[] args)
    {
        int n = 96;
        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 program
 
n = 96;
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[0] = prime[1] = 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 program
    public static void Main()
    {
        int n = 96;
        numbersWith3Divisors(n);
    }
}
 
// This code is Contributed by mits

PHP

<?php
// PHP 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)
{
    $prime = array_fill(0, $n + 1, true);
    $prime[0] = $prime[1] = false;
 
    for ($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 ($i = $p * 2; $i <= $n; $i += $p)
            $prime[$i] = false;
        }
    }
 
    // print squares of primes upto n.
    echo "Numbers with 3 divisors :\n";
    for ($i = 0; $i * $i <= $n ; $i++)
        if ($prime[$i])
        echo $i * $i . " ";
}
 
// Driver Code
$n = 96;
numbersWith3Divisors($n);
 
// This code is contributed by mits
?>

Javascript

<script>
    // 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[0] = prime[1] = 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 :" + "</br>");
        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.
</script>

Producción: 

Numbers with 3 divisors :
4 9 25 49 

Complejidad del tiempo : O(sqrt(n))

Espacio Auxiliar : O(n)

Otro enfoque:

Para imprimir todos los números en el rango de 1 a N que tienen exactamente 3 divisores, el cálculo principal es encontrar aquellos que son cuadrados de números primos y menores o iguales que el número. Podemos hacer esto de la siguiente manera:

  1. Inicie un bucle para el entero i de 2 a n.
  2. Compruebe si i es primo o no, lo que se puede hacer fácilmente usando el método isPrime(n) .
  3. Si i es primo, verifica si su cuadrado es menor o igual que el número dado. Esto se comprobará solo para los cuadrados de los números primos, por lo que se reducirá el número de comprobaciones.
  4. Si se cumple la condición anterior, se imprimirá el número y el bucle continuará hasta i<=n.

De esta manera, no se requerirá espacio adicional para almacenar nada.

Aquí hay una implementación de la lógica anterior sin usar espacio adicional;

C++

// C++ program to print all
// three-primes smaller than
// or equal to n without using
// extra space
#include <bits/stdc++.h>
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;
 
    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 program
    public static void main(String[] args)
    {
        int n = 122;
        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
n = 122
 
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;
     
    numbersWith3Divisors(n);
}
}
 
// This code is contributed by divyeshrabadiya07

Javascript

<script>
    // 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.
</script>

Producción:

Numbers with 3 divisors :
4 9 25 49 121

Complejidad de tiempo: O(sqrtN 2 )

Espacio Auxiliar: O(1)

Este artículo es una contribución de Shivam Pradhan (anuj_charm) . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *