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);
}