/* File: primo.c */
/* Time-stamp: "2002-04-18 11:37:11 calvanes" */
/* Scopo: cicli indefiniti */

#include <stdio.h>

/* Legge un intero positivo da tastiera e stampa il piu` piccolo divisore
   minore del numero, se questo esiste, un messaggio che il numero e` primo,
   altrimenti.

   Il procedimento consiste nel cercare di dimostrare che il numero non e`
   primo andando a cercare un divisore.

   ALGORITMO: verifica se N e` primo e stampa il piu` piccolo divisore
     divisore = 2;       (e` il primo valore provato come possibile divisore)
     trovato = falso;    (inizialmente non abbiamo trovato alcun divisore)
     WHILE divisore < N e non abbiamo trovato un divisore
     DO incrementa il divisore di 1
        IF divisore divide N
        THEN poni trovato a vero (fa interrompere il ciclo)
     IF trovato
     THEN stampa il divisore
     ELSE stampa che il numero non e` primo
*/

int main(void)
{
  int n, divisore;
  int trovato = 0;  /* booleana: indica se e` stato trovato un divisore */

  printf("Numero? ");
  scanf("%d", &n);

  divisore = 2;
  while ((divisore < n) && !trovato) {
    if ((n % divisore) == 0)
      trovato = 1;
    else
      divisore++;
  }

  printf("Il numero %d ", n);
  if (trovato)
    printf ("non e` primo.  E` divisibile per %d.\n", divisore);
  else
    printf ("e` primo.\n");

  return 0;
}