edutecnica

Esercizio 11       

Scrivere un programma che inserito un numero intero, scriva a schermo se il numero è primo o no. Nel caso il numero non sia primo il programma deve stampare la sua fattorizzazione. Ad esempio 12=2*2*3.


Prima si valuta se il numero è primo tramite la funzione

bool numeroprimo(int n)

All'interno di tale funzione il programma scrive a schermo se il numero è primo o no. Se il numero non è primo viene mandata in esecuzione la funzione

void dec(int n)

che ne stamperà la fattorizzazione.
Nella funzione dec(n) il valore n del numero n viene posto nella variabile temporanea p (p=n) il contatore i viene incrementato da 2 a p/2.
Se i è un divisore di p, i viene stampato e il successivo valore di p vale p/i.
Se i è un divisore di p, dopo la sua stampa i viene decrementato (e poi successivamente incrementato).
Senza questo ultimo accorgimento potremmo non accorgerci che p possa essere più volte divisibile per i.

#include < iostream >
using namespace std;
bool numeroprimo(int n){
bool p=true;
for(int i=2;i < n/2;i++)
    if(n%i==0)p=false;
       if(p)cout << "numero primo\n"; else cout << "NON primo\n";
return p;
}
void dec(int n){
int p,i;
bool primo;
p=n;
i=2;
primo=true;
do{
   if(p%i==0){
      if(primo==true)cout << i;
      else cout << "*" << i;
      p=p/i; i--;
      primo=false;
}
i++;
}while(i < n/2); }//fine dec
main(){
int n,i,p;
bool primo=true;
cout << "ins.num:";cin >> n;
primo=numeroprimo(n);
if(!primo)dec(n);
}