Нет необходимости в алгоритме, математическая интуиция может сделать это самостоятельно:
Шаг 1: докажите, что результирующий набор с номерами, превышающими 3, не лучше, чем результирующий набор только с 3 и 2
Учитывая любое число x в вашем наборе результатов, можно подумать, лучше ли разделить его на два числа.
Сумма все равно должна быть x .
- Когда x является четным, максимальное значение для t ( x - t ) достигается при t = x / 2, за исключением специального случая x = 2, тогда он больше x , а для специального случая x = 4, равно x (см. Примечание 1).
- Когда x нечетно, максимальное значение для t ( x - t ) достигается при t = ( x ± 1) /2.
Что это показывает? Только то, что у вас должно быть только 3 и 2 в вашем окончательном наборе, потому что в противном случае он неоптимален (или эквивалентен оптимальному набору).
Шаг 2: у вас должно быть как можно больше 3-х
Теперь, когда 3²> 2³, у вас должно быть как можно больше 3-х, если остаток не равен 1.
Вывод: для каждого N> = 3:
- Если N = 0 mod 3, тогда набор результатов будет только 3
- Если N = 1 mod 3, то результирующий набор имеет одну пару из 2 (или 4), а остальные - 3
- Если N = 2 mod 3, то в наборе результатов будет один 2, а остальные - 3
Пожалуйста, исправьте этот пост. Время, когда я писал хорошо структурированные математические доказательства, далеко ...
Примечание 1: (2,4) - единственная пара различных целых чисел, такая что x ^ y = y ^ x. Вы можете доказать это с помощью:
x^y = y^x
y ln(x) = x ln(y)
ln(x)/x = ln(y) / y
и функция ln(t)/t
строго убывает после своего глобального максимума, достигнутого между 2 и 3, поэтому, если вам нужно два различных целых числа, таких как ln(x)/x = ln(y)/y
, одно из них должно быть меньше или равно 2. Из этого вы могу сделать вывод, что только (2,4) работает