//Codificado por: sAfOrAs
//LIstar los numeros según el numero de digitos indicado
//Considero solo hasta numeros menores a 100000 (5 digitos), por el hecho de k buscar numeros primos a partir de 6 digitos, el proceso se hace muy lento.
public class SyGNumerosPrimos
{
public static void main(String arg[])
{
int numDigitos=0;
int ndigitos=0;
numDigitos=Integer.parseInt(arg[0]);
if(numDigitos<=0)
System.out.println("Ingrese como parámetro, un numero de digitos correcto (mayor que 0): ");
for(int i = 1; i <= 99999; i++ )
{
ndigitos=contarDigitos(i);
if(ndigitos==numDigitos)
if (primo(i) == true)
System.out.println(i);
}
}
public static boolean primo(int num)
{
boolean p = false;
if (num < 4) p = true;
else
{
if (num % 2 == 0) p = false;
else
{
int contador = 0;
int i = 1;
int limite = (num - 1) / 2;
if (limite % 2 == 0) limite--;
while(i <= limite)
{
if (num % i == 0) contador++;
i += 2;
if (contador == 2) i = limite + 1;
}
if (contador == 1) p = true;
}
}
return p;
}
public static int contarDigitos(int numeroEntero)
{
int divisionEntera = numeroEntero;
int contador=0;
while (divisionEntera != 0)
{
divisionEntera = divisionEntera / 10;
contador++;
}
return contador;
}
}
Me gusta esto:
Me gusta Cargando...
Relacionado
Hola, no me corre
no corre
y para imprimir los no primos?
hola, primo(1) y primo(0) dan true? una forma mas rapida de saber si es primo… de forma sencilla se me ocurre:
public static boolean primo(int n){
//verifico que no sea par o que sea 1
n = Math.abs(n);
if(n&1)==0 && n!=2) || n==1)return false;
for(int i=3;i<(int)(Math.sqrt(n))+1;i+=2){
if(n%i==0)return false;
}
return true;
}
de la misma forma contarDigitos podria ser
public static int contarDigitos(int numeroEntero){
return String.valueOf(numeroEntero).length();
}