Ciao a tutti.
Ho appena iniziato a studiare C e sto facendo gli esercizi, credo che questo sia facile ma non riesco a farlo.
Io ho fatto questo algoritmo(mi sa che è un po' brutale, ma siamo agli inizi e non so farne di meglio) mi interessa sapere dove è sbagliato(mi da come fattori primi multipli di 5).

codice:
# include <stdio.h>
# include <stdlib.h>
int main() {
    int num, d, f, dprimo=-1;
    printf("inserire valore da fattorizzare\n");
    scanf("%d", &num);
    for(d=2; d<=num; d++){
        for(f=2; f<d; f++){
            if(num%d==0&&d%f!=0)
                dprimo=d;
            else
                dprimo=-1;
                break;
        }
        if(dprimo!=-1){
            printf("%d\n", dprimo);
            num=num/dprimo;
        }
    }

	return 0;
}
Il professore ci ha dato invece questo come soluzione ma non riesco a capirlo, a me sembra mancare di molte parti, me lo potete spiegare?

codice:
# include <stdio.h> 
int main() { 
    int num, fatt, cont; 
    printf("\nInserisci un numero intero \n"); 
    scanf("%d",&num); 
    printf("\n i fattori primi di %d sono:",num); 
        for (fatt=num;fatt>1;fatt--)  { //ipotesi: se num è primo considero num
                                                   //               divisore primo di se stesso
            if(num%fatt==0) { /*se fatt è divisore di num cerca se ha divisori*/ 
                cont=fatt-1; // tutti i numeri son divisibili per se stessi, quindi fatt-1
                while((cont > 1) && (fatt%cont != 0)) 
                    cont--; 
                /* se sono arrivato a 1 vuol dire che non ho trovato divisori 
                quindi stampo fatt perché primo */ 
                if (cont == 1) 
		    printf(" %d ",fatt); 
            } 
    }
    return 0; 
}
Grazie a tutti!