Ho un problema con questo programma. Genero 10 numeri interi pseudo-casuali e per ognuno calcolo per quali numeri interi nell'intervallo [2,10] è divisibile. Voglio inserire i numeri generati casualmente in una lista i cui nodi contengono un puntatore ad un'altra lista che contiene i divisori di quel nodo.
Il problema è che inserisce per tutti i numeri gli stessi divisori del primo numero generato.
Qualcuno può aiutarmi a scovare l'errore?

codice:
#include <stdio.h>#include <stdlib.h>
#include <time.h>


struct divisore {
    int div;
    struct divisore *next;
};


struct numero {
    int n;
    struct numero *next;
    struct divisore *lista_divisori;
};


void printListI(struct numero *p);
void printListD(struct divisore *p);
struct numero * insertTail(struct numero * head,struct numero * n);
struct numero * nuovoNumero(int num);
struct divisore * inserisciDivisore(struct divisore * head, struct divisore * n);
struct divisore * nuovoDivisore(int divis);




int main()
{
    srand(time(NULL));
    struct numero *head = NULL;
    struct numero *newNumb = NULL;
    struct divisore *divis = NULL;
    int num, i, j;


    for(i=0; i<10; ++i){
        num = 1 + rand()%99;
        newNumb = nuovoNumero(num);
        for(j=2; j<=10; ++j) {
            if((newNumb->n % j) == 0){
                divis = nuovoDivisore(j);
                newNumb->lista_divisori = inserisciDivisore(newNumb->lista_divisori, divis);
            }
        }
        head = insertTail(head, newNumb);
    }


    printListI(head);
    printf("\n");


    return 0;
}


struct numero * nuovoNumero(int num) {
    struct numero *nuovo = malloc(sizeof(struct numero));
    nuovo->n = num;
    nuovo->next = NULL;
    nuovo->lista_divisori = NULL;
    return nuovo;
}


struct divisore * nuovoDivisore(int divis) {
    struct divisore *nuovo = malloc(sizeof(struct divisore));
    nuovo->div = divis;
    nuovo->next = NULL;
    return nuovo;
}


struct divisore * inserisciDivisore(struct divisore * head, struct divisore * n){
  if(head==NULL)
    return n;
  struct divisore * t=head;
  while(t->next!=NULL)
    t=t->next;
  t->next=n;
  return head;
}


struct numero * insertTail(struct numero * head, struct numero * n){
  if(head==NULL)
    return n;
  struct numero * t=head;
  while(t->next!=NULL)
    t=t->next;
  t->next=n;
  return head;
}


void printListI(struct numero *p) {
    struct numero *t = p;
    for(;t!=NULL; t = t->next) {
        printf("%3d  DIVISORI nell'intervallo [2,10]: ", t->n);
        printListD(p->lista_divisori);
        printf("\n");
    }
}


void printListD(struct divisore *head) {
    struct divisore *t = head;
    for(;t!=NULL; t = t->next)
        printf("%d ", t->div);
}