Números primos

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;
}
Share

Deixe um comentário

O seu endereço de e-mail não será publicado.

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.