rhyu 0 Denunciar post Postado Janeiro 4, 2013 Boa tarde pessoal, gostaria de ajuda para resolver o seguinte problema. Escreva um programa que lê um número n, e então imprime o menor número primo que é maior ou igual n, e imprime o maior primo que é menor ou igual a n. consegui criar um programa para verificar se o numero e primo; #include <stdio.h> main () { int n; int i; int divisor; scanf ("%d",&n); divisor = 0; //Numero de divisores for (i = 1; i <= n ; i++) //verifica o numero de divisores que N tem { if (n%i== 0) divisor++; //cada vez que n tem um divisor, incrementa a variavel divisor } if (divisor == 2) printf ("Numero primo\n"); //se o numero de divisores é 2 entao e primo else printf ("Nao eh primo\n"); // se e diferente de 2 entao nao e primo } Mas como eu faço para escolher o primeiro primo maior que n e o primeiro primo menor que n? Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Janeiro 5, 2013 Creio que o loop está errado. O exercício pede que você imprima duas coisas, mas como não existe uma "fórmula mágica p/ saber qual é o próximo primo", a condição de parada é quando você encontrar o primeiro primo maior ou igual a n (e não "i<=n"), por exemplo. Detalhe básico: 1 não é primo. E como não existem inteiros entre 0 e 1, se o usuário informar n = 1, você deve exibir uma mensagem de erro. #include <math.h> #include <stdio.h> int main(void) { int lesser_prime; int greater_prime; int div_limit; int divisor; lesser_prime = greater_prime = n; // Primeiro primo maior ou igual a n. while(1) { // Verificar divisores div_limit = (int) sqrt(greater_prime); // Reduz a quantidade de divisores a ser verificada. for(divisor = 2; divisor < div_limit && greater_prime % divisor != 0; divisor++); if (greater_prime >= n) then break; greater_prime++; }; // Maior primo menor ou igual a n. if (greater_prime == n) then lesser_prime = n; else { lesser_prime = n - 1; // Aqui o limite inferior é 2 porque é o menor número primo conhecido. while (lesser_prime >= 2) { div_limit = (int) sqrt(lesser_prime); for(divisor = div_limit; divisor > 1 && lesser_prime % divisor != 0; divisor--); if (divisor == 1) then break; lesser_prime--; } } printf("%d %d\n", lesser_prime, greater_prime); return 0; } Compartilhar este post Link para o post Compartilhar em outros sites