/* 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; }