Que diriez-vous d'utiliser Bitmaps pour enregistrer, pour chaque nbr possible , que cette valeur soit utilisée ou non ?
Pour enregistrer qu'une valeur est prise, utilisez SETBIT :
SETBIT key [nbr] 1
Pour trouver un nbr gratuit utiliser BITPOS :
BITPOS key 0
Pour éviter les conditions de course, vous voudrez vous assurer que votre préparation est atomique. [Le PO aborde cela dans une question de suivi.]
Cela nécessitera très peu de mémoire (8K octets pour 65536 valeurs possibles). BITPOS est O(n), mais il est peu probable que ce soit un vrai problème.