/* File: primi.c */
/* Time-stamp: "2001-03-12 13:05:27 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)
     fino a che divisore < N e non abbiamo trovato un divisore
     ripeti incrementa il divisore di 1
            se divisore divide N
            allora poni trovato a vero (fa interrompere il ciclo)
     se trovato
     allora stampa il divisore
     altrimenti 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;
}