Ho un'enorme collezione di moduli diversi e associato a ogni modulo una lista abbastanza ampia di remainder. Voglio memorizzare questi valori in modo da poter determinare in modo efficiente se un intero è equivalente a uno qualsiasi dei remainders rispetto a uno qualsiasi dei moduli (non importa quale, voglio solo un vero / falso ritorno).
Ho pensato di archiviare questi valori come una lista collegata di alberi binari bilanciati, ma mi stavo chiedendo se c'è un modo migliore?
Modifica
Forse un po 'più di dettaglio sarebbe utile. Per quanto riguarda la dimensione di questa struttura, sarà in grado di contenere circa 10 s di migliaia di moduli (prime-1) e associati a ciascun modulo sarà una quantità variabile di resti. La maggior parte dei moduli avrà solo uno o due remainders associati ad esso, ma a pochi rarissimi ne saranno associati un paio di centinaia.
Questo fa parte di un programma più ampio che gestisce numeri con un paio di migliaia di cifre (decimali). Questo programma trarrà vantaggio dal fatto che questa tabella è la più ampia possibile e può essere ricercata rapidamente.
Ecco una piccola parte del set di dati in cui i moduli sono tra parentesi e i resti sono separati da virgola:
(46) k = 20
(58) k = 15, 44
(70) k = 57
(102) k = 36, 87
(106) k = 66
(156) k = 20, 59, 98, 137
(190) k = 11, 30, 68, 87, 125, 144, 182
(430) k = 234
(520) k = 152, 282
(576) k = 2, 11, 20, 29, 38, 47, 56, 65, 74, ...(add 9 each time), 569
Avevo detto che i moduli erano primi, ma mi sbagliavo sono tutti sotto un primo.