Для байтов - последнее простое число 251
Вот например простое число 11111110000009
n-это размерность массива S.
Надорвётся только чел не знающий математики.
Задача поиска простого полиномиальна.
Могу привести первые несколько десятков тысяч простых чисел.
Вам что алгоритма ещё и код здесь писать ?
А зарплату платить будете ? :)
Сорри за эмоции перед теми к кому они не относятся.
Люблю я себя цитировать.... :)
Похоже что нет необходимости ряд простых чисел P брать с конца диапазона. Можно и с начала. А вообще почитайте классиков про хеш-функции. Более того , ряд P можно брать не подряд а по приципу P берём, P[i+1] берём , а P[i+2]-пропускаем Получается двоичный вектор V размерности n. Всего возможно 2^n-1 таких векторов. Этот принцип можно использовать для многих полезных вещей. 1) Криптография. По сути не зная V правильной хеш-функции не найти. То есть V может быть ключём шифрования симметричного типа. 2) Хеш-функций получается (2^n-1) штук. Этот факт можно попробовать использовать ещё для чего-нибудь. Хотя не думаю что такой индекс будет компактней чем сочетание традиционных прямого и обратного. Но попробовать интересно. PS:Вообщето звание абитуриента для меня крайне несвойственно. Давайте повышайте статус. ;0)
С байтами наверное правильнее будет , чтобы не терять на выравнивании слов .
1) Слово рассматриваете как последовательность целых (unsigned long). Можно и байтов.
2) Считаете его контрольную S сумму по mod P , где P - простое и i-е с конца в (unsigned long) Повторяете циклически 0< i <=n до тех пор пока не достигнете нужной вероятности коллизий. Массив S[0..n] - будет искомым индексом.