import java.util.Scanner;
/**
* Programa estructurado que devuelve los números raros hasta un número dado.
* Un número es raro cuando verifica que para
* cualquier número m, menor que él y tal que ambos números sean primos entre sí, resulta
* que m es un número primo.
* @author David Robles Gallardo
* @version 1.0
*/
public class Raro {
/**
* Calcula el máximo común divisor de dos números dados
* @param n Primer número
* @param m Segundo número
* @return el máximo común divisor de ambos números
*/
public static int euclides(int n, int m){
int resto=n%m;
while(resto!=0){
resto=n%m;
m=n;
m=resto;
}
return n;
}
/**
* Permite determinar si un número es primo mediante divisiones sucesivas hasta como máximo dividirlo por su raíz
* @param n Número del que se desea conocer si es primo
* @return booleano que indica si el número es primo o no
*/
public static boolean primo(int n){
int raiz=(int)(Math.sqrt(n));
boolean esPrimo=true;
int numero=2;
while(numero<=raiz && esPrimo){
if(n%numero==0){
esPrimo=false;
}
else{
numero=numero+1;
}
}
return esPrimo;
}
/**
* Solicita un número por teclado y calcula todos los números raros desde 3 hasta él.
* @param args Argumentos del programa
*/
public static void main(String []args){
Scanner in=new Scanner(System.in);
boolean esRaro=false;
int contador, numero;
do{
System.out.println("Escriba un número entero positivo");
numero=in.nextInt();
}while(numero<3);
System.out.println("Los números raros son: ");
for(int i=3;i<numero;i++){
esRaro=true;
contador=1;
while(esRaro && contador<i){
if (euclides(contador,i)==1 && !primo(contador)){
esRaro=false;
}
contador=contador+1;
}
if(esRaro){
System.out.println(i+" es un número raro");
}
}
}
}
Comentarios sobre la versión: 1.0 (3)