A titolo di curiosità, questo consente di calcolare tutte le combinazioni specificando arbitrariamente il set di caratteri (modificando l'array valori) e la lunghezza della stringa (modificando il #define NUMEROCIFRE).
codice:
#include <stdio.h>

#define ARRSIZE(arr)    (sizeof(arr)/sizeof(*(arr)))

#define NUMEROCIFRE 5

int main()
{
    const char valori[]= {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
    char buffer[NUMEROCIFRE+1]={0};
    int stack[NUMEROCIFRE]={0};
    int cifraCorrente=0;
    for(; ; )
    {
        //Se siamo passati oltre
        if(stack[cifraCorrente]==ARRSIZE(valori))
        {
            //Torna alla cifra precedente, eventualmente esce
            if(--cifraCorrente==-1)
                break;
            //Ripete il controllo
            continue;
        }
        buffer[cifraCorrente]=valori[stack[cifraCorrente]];
        //Se siamo nel ciclo più interno stampa il risultato
        if(cifraCorrente==NUMEROCIFRE-1)
            puts(buffer);
        stack[cifraCorrente]++;
        //Passa alla cifra successiva, a meno che non siamo già all'ultima
        if(cifraCorrente<NUMEROCIFRE-1)
        {
            cifraCorrente++;
            stack[cifraCorrente]=0;
        }
    }
    return 0;    
}
Con le impostazioni in questione (alfabeto di 36 simboli, 5 lettere di lunghezza):
codice:
matteo@teoubuntu:~/cpp$ gcc -Wall -O3 combinazioni.c -o combinazioni.o
matteo@teoubuntu:~/cpp$ time ./combinazioni.o > combinazioni.txt

real	0m4.078s
user	0m2.424s
sys	0m1.380s
Di fatto quindi il calcolo effettivo impiega circa 2.42 secondi, gli 1.38 secondi di sys sono IO (e la differenza tra usr+sys e real è tempo dedicato ad altri processi). In sostanza, al netto dell'IO fa circa 25 milioni di combinazioni al secondo sul mio vecchio Athlon64 3800+.
Inizio e fine del file generato:
codice:
matteo@teoubuntu:~/cpp$ head combinazioni.txt 
00000
00001
00002
00003
00004
00005
00006
00007
00008
00009
matteo@teoubuntu:~/cpp$ tail combinazioni.txt 
zzzzq
zzzzr
zzzzs
zzzzt
zzzzu
zzzzv
zzzzw
zzzzx
zzzzy
zzzzz
Non credo che terrò combinazioni.txt per ricordo...
codice:
matteo@teoubuntu:~/cpp$ ls -lh combinazioni.txt
-rw-r--r-- 1 matteo matteo 346M 2009-10-06 22:52 combinazioni.txt
matteo@teoubuntu:~/cpp$ rm combinazioni.txt 
matteo@teoubuntu:~/cpp$