Salve a tutti,
recentemente ho approcciato il linguaggio C iniziando a fare semplici programmi, ho un insegnante molto severo e richiede la massima efficienza dei codici, la consegna era di calcolare tutti i fattori primi di un numero e stamparli a video, questa e' la codifica:
codice:
#include <stdio.h>
int main()
{
int n; //numero in input
int r; //resto
int d; //divisore
int q; //quoziente
int i; //contatore dei fattori
i=0; //resetto il contatore
d=2; //imposto il divisore a 2
do //input e controllo del numero per n>0
{
printf("Gimme n>0: ");
scanf("%d",&n);
}
while (n<=0);
if (n<4) //se 0<n<4 allora il numero è primo
{
printf("\n%d è un numero primo.",n);
return(0);
}
q=n;
while (d<=q) //finchè il divisore è maggiore del numero da dividere, divido e stampo il divisore
{
r=q%d; //calcolo il resto tra il numero e il divisore
if (r==0) //se il resto è 0, d è un divisore
{
printf("\n%d",d); //stampo il divisore
q=q/d; //divido il numero soltanto se trovo un disore
i++; //conto quanti divisori stampo a video
}
else //se il resto è diverso da 0, aggiungo il resto all' attuale divisore
{
d=d+r;
}
}
if (i==0)printf("\n%d è un numero primo.",n); //se non e stato trovato nessun divisore il numero è primo
return (0);
}
potreste gentilmente aiutarmi a ottimizzarlo?