Gerador de Números Primos – C

primos
/*
 * Gera números primos a partir de um limite superior estabelecido.
 *
 */
#include <stdio.h>
#include <stdlib.h>

int main() {
    int n, nMax, i, j, totalDivisores;

    // Recebe o limite para exibição dos números primos
    printf("Digite o limite superior para os numeros primos(Minimo 2): ");
    scanf("%d", &nMax);

    // Verifica se o limite superior é um número válido
    // O menor número primo é 2
    while(nMax < 2) {
        system("cls");
        printf("Digite o limite superior para os numeros primos(Minimo 2): ");
        scanf("%d", &nMax);
    }

    // Verifica se o número é primo e imprime o valor na tela
    for(i = 0; i <= nMax; i++) {
        totalDivisores = 0;
        // Conta os divisores para verificar se o valor é primo
        for(j = 1; j <= i; j++) {
            if(i % j == 0) {
                totalDivisores++;
            }
        }
        // Se o total de divisores é dois, imprime o primo com formatação de 4 casas
        if(totalDivisores == 2) {
            printf("%4d ", i);
        }
    }

    printf("n");
    system("pause");
    return 0;
}

  • Song Jong Márcio Simioni da Co

    Fiz algumas melhorias…
    #include
    #include
    #include
    int main() {
    unsigned int nMax, i, j, ehPrimo;
    printf("Digite o limite superior para os numeros primos(Minimo 2): ");
    scanf("%d", &nMax);
    while(nMax < 2) {
    system("clear");
    printf("Digite o limite superior para os numeros primos(Minimo 2): ");
    scanf("%d", &nMax);
    }
    printf("2 ");
    for(i = 3; i <= nMax; i=2+i) {
    if(((i%5)==0)&&(i!=5)){
    continue;
    }
    ehPrimo = 1;
    for(j = 3; j <= (unsigned int)sqrt((float)i)+1; j++) {
    if(i % j == 0) {
    ehPrimo = 0;
    break;
    }
    }
    if(ehPrimo) {
    printf("%d ", i);
    }

    }
    return 0;
    }