Una pequeña matización, signed y unsigned en este contexto es con signo y sin signo, no firmado y sin firmar :-P. Aunque ésto viene más a cuento en el hilo de malas traducciones :-P
Cuando usas malloc simplemente estás reservando memoria consecutiva, no tiene dimensiones, etc. Por lo tanto para reservarla simplemente haz el malloc de num * 20. Luego eres tú el que, si quieres, tienes que tratarla como una matriz.
Si usas matemáticas es más rápido, fácil y la complejidad pasa de ser lineal a constante.
Suponiendo que siempre trabajas con naturales y que A > B Entre A y B (incluyéndolos) hay B-A+1 números. La suma de los números entre A y B (incluyéndolos) es (A+B) * (B-A+1) / 2 (ésta deberías comprobarla la he sacado sin usar papel y lápiz y se me da mal sacar cosas sin escribirlas xD).