Números primos em um intervalo
Elabore um algoritmo para mostrar os números primos existentes em um intervalo.
O usuário deverá fornecer os valor inicial (inicial > 0) e final (inicial < final) e os números primos existentes no intervalo ([inicial, final]) devem ser separados por 1 espaço em branco.
Exemplo:
- entrada: 2 13
- saída: 2 3 5 7 11 13
Solução em linguagem C
#include <stdio.h>
int main(void) {
int min, max, i, j, primo;
scanf("%i %i", &min, &max);
for (i = min; i <= max; i++) {
if (i == 0 || i == 1) {
//números zero e 1 não são primos
primo = 0;
} else {
primo = 1; //considero inicialmente que o número é primo
for(j = 2; j < i; j++) { //tento provar que ele não é primo
if (i % j == 0) {
primo = 0; //consigo provar que ele não é primo
}
}
}
if (primo == 1) {
printf("%i ", i);
}
}
return 0;
}
Teste o código: http://ideone.com/W3gNmR
Solução 2 – em linguagem C
O algoritmo abaixo considera a possibilidade de primos negativos.
#include <stdio.h>
int main(void) {
int min, max, i, j, primo;
scanf("%i %i", &min, &max);
for (i = min; i <= max; i++) {
if (i == 0 || i == 1 || i == -1) {
primo = 0;
} else {
primo = 1;
if (i < 0) {
for(j = 2; j < (i*-1); j++) {
if ((i*-1) % j == 0) {
primo = 0;
}
}
} else {
for(j = 2; j < i; j++) {
if (i % j == 0) {
primo = 0;
}
}
}
}
if (primo == 1) {
printf("%i ", i);
}
}
return 0;
}
Teste o código: http://ideone.com/OHAGoK
Outra versão do código acima. Veja que foi removido um laço de repetição for e adicionada uma variável, que converte o número negativo em positivo, deixando o código bem parecido com o anterior.
#include <stdio.h>
int main(void) {
int min, max, i, j, primo, numTeste;
scanf("%i %i", &min, &max);
for (i = min; i <= max; i++) {
if (i == 0 || i == 1 || i == -1) {
primo = 0;
} else {
primo = 1;
if (i < 0) {
numTeste = i * -1; //torna o valor positivo
}
for(j = 2; j < i; j++) {
if (i % j == 0) {
primo = 0;
}
}
}
if (primo == 1) {
printf("%i ", i);
}
}
return 0;
}