Programming

T03-002-01 Ejercicios con funciones que devuelven enteros.

Enunciado

Queremos hacer un programa Java que ofrezca las siguientes dos opciones:

1. Calcular los N primeros números primos

2. Calcular los números primos entre dos números N y M dados, así como contar cuántos son

En el siguiente enlace tienes información sobre lo que es un número primo. Básicamente, un número es primo es un número que solamente es divisible por él mismo y por la unidad.

Ejemplos:

El 37 SI es primo

El 98 NO es primo, porque puede dividirse, entre otros, entre 2.

El 1 NO es primo (ATENCIÓN, cuidado porque cuando resolvimos este problema anteriormente, sí lo consideramos primo).

ENTRADA

La entrada comienza con un número indicando cuántos casos de prueba habrá que procesar.

Cada uno de los casos está compuesto por la opción de cuál de los dos problemas solucionar, es decir, un 1 o un 2:

  • Si la opción es un 1, irá seguido de otro número entero positivo: N
  • Si la opción es un 2, irá seguido de dos números enteros positivos: N y M

SALIDA

Por cada caso de prueba, el programa escribirá la solución al mismo tal y como se puede apreciar en el OUTPUT.

RESTRICCIONES

Deberá resolverse el problema diseñando una función que reciba un número y devuelva en un booleano si es primo o no.

Se proporcionan la cabecer o interfaz de dicha función en la sección MUST CONTAIN 

El programa principal, para cada uno de los casos, pedirá los números por teclado y usará la función para resolver el problema, imprimiendo posteriormente lo que tenga que imprimir para resolver el problema planteado.

ATENCIÓN: Intenta resolverlo de la manera más óptima posible. Es decir, en cuanto sepas que no es primo, no tienes por qué seguir haciendo cálculos. Observa el tiempo de ejecución cuando el número primo es un número grande.

Solución


											
import java.util.Scanner; public class FNumeroPrimo { public static void main(String[] args) { // TODO code application logic here Scanner sc = new Scanner(System.in); int numCasos = 0; int opcion = 0; int n = 0, m = 0; int cantidadPrimos = 0; int numero = 0; numCasos = sc.nextInt(); for (int i = 1; i <= numCasos; i++) { opcion = sc.nextInt(); switch (opcion) { case 1: n = sc.nextInt(); cantidadPrimos = 0; numero = 0; while (cantidadPrimos < n) { numero++; if (esPrimo(numero)) { cantidadPrimos++; System.out.print(numero + " "); } } System.out.println(); break; case 2: n = sc.nextInt(); m = sc.nextInt(); cantidadPrimos = 0; for (int j = n; j <= m; j++) { if (esPrimo(j)) { cantidadPrimos++; System.out.print(j + " "); } } System.out.println("\nTotal de " + cantidadPrimos + " numeros primos"); break; default: System.out.println("Opción incorrecta"); break; } } } public static boolean esPrimo(int numero) { int divisor = 1; boolean primo = true; if (numero == 1) { primo = false; } else { divisor = numero - 1; while (divisor > 1 && primo == true) { if (numero % divisor == 0) { primo = false; } divisor--; } } return primo; } }

Input

7 1 10 2 1 100 1 25 2 100 300 1 30 2 50 100 2 5000 5100
7 1 25 2 1 100 1 10 2 100 300 1 30 2 50 100 2 5000 5100

Output

2 3 5 7 11 13 17 19 23 29 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 Total de 25 numeros primos 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293 Total de 37 numeros primos 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 53 59 61 67 71 73 79 83 89 97 Total de 10 numeros primos 5003 5009 5011 5021 5023 5039 5051 5059 5077 5081 5087 5099 Total de 12 numeros primos
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 Total de 25 numeros primos 2 3 5 7 11 13 17 19 23 29 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293 Total de 37 numeros primos 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 53 59 61 67 71 73 79 83 89 97 Total de 10 numeros primos 5003 5009 5011 5021 5023 5039 5051 5059 5077 5081 5087 5099 Total de 12 numeros primos