Bueno, quizá sea el más eficiente desde la fuerza bruta, porque el más eficiente es la "criba general del cuerpo de números".
Por otro lado, veo un pequeño problema en la parte de la presentación, por lo menos usa paréntesis para que quede más claro todo, en lugar de:
Podrías poner
Luego, siempre me ha hecho gracia usar los operadores "==" y "!=" fuera de un if o for, sin embargo hay que reconocer que es poco comprensible, y al final se supone que perseguimos la legibilidad del código. Si usaras
apenas se traduce en cuatro instrucciones más en ensamblador, no se pierde en eficiencia y se gana en legibilidad.
De todas formas, yo creo que puede hacerse más simple sin perder eficiencia.
Por otro lado, veo un pequeño problema en la parte de la presentación, por lo menos usa paréntesis para que quede más claro todo, en lugar de:
Código [Seleccionar]
for(j = 2; is_prime == 1 && j*j <= numero_a_comprobar; j++)
Podrías poner
Código [Seleccionar]
for(j = 2; (is_prime == 1) && (j*j <= numero_a_comprobar); j++)
Luego, siempre me ha hecho gracia usar los operadores "==" y "!=" fuera de un if o for, sin embargo hay que reconocer que es poco comprensible, y al final se supone que perseguimos la legibilidad del código. Si usaras
Código [Seleccionar]
if(numero_a_comprobar % j != 0)
is_prime = 1;
else
is_prime = 0;
apenas se traduce en cuatro instrucciones más en ensamblador, no se pierde en eficiencia y se gana en legibilidad.
De todas formas, yo creo que puede hacerse más simple sin perder eficiencia.