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?