Не случайное меньшее число

Рейтинг: 1Ответов: 1Опубликовано: 17.11.2014

Есть диапазон числ от 1 до 10000, нужно преобразовать случайное число из диапазона в числа от 0 до 6. Операция должна быть повторима, т.е. вызывам my_function(754), получаем 3, повторный вызов должен выдать вновь 3. Ну и максимально равномерно распределять использование чисел 0-6 среди 1-10000. Извиняюсь за плохую формулировку.

Ответы

▲ 3Принят

Самый простой вариант -

function my_func($num){
  return $num%7;
}

Распределение идеальное.

Чуть сложнее - домножить его на какое-нибудь простое число, а потом взять по модулю 7.

function my_func($num){
  return 2711*$num%7;
}

Обновление

Я даже рискну предположить, что число, на которое мы домножаем (2711 в примере), достаточно представить взаимно-простым с 7, но гарантировать не могу: математику подзабыл уже. Поэтому используйте простое, оно не нарушит распределения.