-----------------------------------------------------------------
 MAC-115 - Turma T23 -   29/agosto  --  PRIMOS 
=================================================================

/*
 * arquivo: primo1.c
 * -------------------
 * Dado um inteiro n > 0, este programa verifica se 
 * n é primo. Dizemos que n é primo se n tem exatamente dois 
 * divisores distintos: o 1 e ele mesmo.
 * O 1 não é primo. O 2 é primo.  
 */
#include <stdio.h>

int main()
{
    int n,			/* inteiro a ser testado se é primo */
        d,			/* candidato a divisor de n */
        contador;		/* conta o total de divisores */

    printf("Digite o valor de n: ");
    scanf("%d", &n);
    contador = 0;
    d = 1;
    while (d <= n) {
	if (n % d == 0)
	    contador = contador + 1;
	d = d + 1;
    }
    if (contador == 2)
	printf("%d é primo.\n", n);
    else
	printf("%d não é primo.\n", n);

    return 0;
}

-----------------------------------------------------------

/*
 * arquivo: primo2.c
 * -------------------
 * Dado um inteiro n > 0, este programa verifica se 
 * n é primo. Dizemos que n é primo se n tem exatamente dois 
 * divisores distintos: o 1 e ele mesmo.
 * O 1 não é primo. O 2 é primo.  
 */
#include <stdio.h>

int main()
{
    int n,			/* inteiro a ser testado se é primo */
        d,			/* candidato a divisor de n */
        IsPrime;                /* IsPrime = 1 se n é primo   */
                                /* IsPrime = 0 se n não é primo */
                               
    printf("Digite o valor de n: ");
    scanf("%d", &n);

    IsPrime = 1; /* consideramos n primo, ate' prova em contrario */
    if (n <=1) 
      IsPrime = 0;
    d = 2;
    while (d <= n/2) {
	if (n % d == 0)
	  IsPrime = 0; /* encontramos um divisor, portanto n nao é primo */
	d = d + 1;
    }
    if (IsPrime == 1)  /* Veja OBS abaixo */
	printf("%d é primo.\n", n);
    else
	printf("%d não é primo.\n", n);

    return 0;
}

 
/* OBS: Aqui poderia ser:  "if (IsPrime)"  --- Troque esta parte, e
 * chame o novo programa de primo3.c para fazer o teste.
*/

----------------------------------------------------------------
/*
 * arquivo: primo4.c
 * -------------------
 * Dado um inteiro n > 0, este programa verifica se 
 * n é primo. Dizemos que n é primo se n tem exatamente dois 
 * divisores distintos: o 1 e ele mesmo.
 * O 1 não é primo. O 2 é primo.  
 */
#include <stdio.h>
#define TRUE 1
#define FALSE 0

int main()
{
    int n,			/* inteiro a ser testado se é primo */
        d,		        /* candidato a divisor de n */
        IsPrime;		/* IsPrime = TRUE se n é primo   */
                                /* IsPrime = FALSE se n não é primo */

    printf("Digite o valor de n: ");
    scanf("%d", &n);

    IsPrime = 1;		/* consideramos n primo, ate' prova em contrario */
    if (n <= 1)
	IsPrime = FALSE;
    d = 2;
    while (d <= n / 2) {
	if (n % d == 0)
	    IsPrime = FALSE;	/* encontramos um divisor, portanto n nao é primo */
	d = d + 1;
    }
    if (IsPrime == TRUE)
	printf("%d é primo.\n", n);
    else
	printf("%d não é primo.\n", n);

    return 0;
}

------------------------------------------------------

/*
 * arquivo: primo4.c
 * -------------------
 * Dado um inteiro n > 0, este programa verifica se 
 * n é primo. Dizemos que n é primo se n tem exatamente dois 
 * divisores distintos: o 1 e ele mesmo.
 * O 1 não é primo. O 2 é primo.  
 */
#include <stdio.h>
#define TRUE 1
#define FALSE 0

int main()
{
    int n,			/* inteiro a ser testado se é primo */
        d,			/* candidato a divisor de n */
        IsPrime;		/* IsPrime = TRUE se n é primo   */
                                /* IsPrime = FALSE se n não é primo */

    printf("Digite o valor de n: ");
    scanf("%d", &n);

    IsPrime = 1;		/* consideramos n primo, ate' prova em contrario */
    if (n <= 1)
	IsPrime = FALSE;
    d = 2;
    while (d <= n / 2 && IsPrime == TRUE) {
	if (n % d == 0)
	    IsPrime = FALSE;	/* encontramos um divisor, portanto n nao é primo */
	d = d + 1;
    }
    if (IsPrime == TRUE)
	printf("%d é primo.\n", n);
    else
	printf("%d não é primo.\n", n);

    return 0;
}

/* OBS: a condicao composta 
 *     d <= n / 2 && IsPrime == TRUE ou equivalentemente,
 *    (d <= n / 2)  && (IsPrime == TRUE) 
 *   é verdadeira se e só se ambas as condicoes d <= n / 2  e IsPrime == TRUE 
 *  sao verdadeiras. Ou seja, se uma delas, ou ambas forem falsas, a condicao 
 *  composta e' falsa.
 */