После комментариев @JohnY я предполагаю, что вопрос:
Найдите набор из 5 целых чисел, удовлетворяющих следующим требованиям:
- их сумма равна 100
- любое число в диапазоне [1, 100] может быть построено с использованием не более одного раза элементов набора и только дополнений и вычитаний
Конечно, возможен метод грубой силы , но доказывать, что любое число может быть построено таким образом, было бы утомительно. Но стратегия «разделяй и властвуй» возможна: для построения всех чисел до n с помощью набора чисел m u 0 ..., u m-1 , достаточно построить все числа до (n + 2) / 3 с u 0 ..., u m-2 и использованием u m-1 = 2 * n / 3. Любое число в диапазоне ((n + 2) / 3, u m-1 ) можно записать как u m-1 -x с x в [1, (n +2) / 3] и любое число в (u m-1 , n] диапазоне как u m-1 + y с y в том же нижнем диапазоне.
Таким образом, мы можем использовать здесь u 4 = 66 и найти способ построить числа до 34 с 4 числами.
Давайте итерируем: u 3 = 24 и строить числа до 12 с 3 числами.
Еще один шаг u 2 = 8 и строить числа до 4 с 2 числами.
Ok : u 0 = 1 и u 1 = 3 дают сразу:
- 1 = u 0
- 2 = 3 - 1 = u 1 - u 0
- 3 = u 1
- 4 = 3 + 1 = u 1 + u 0
Готово.
Математическое отступление:
Фактически вы 0 = 1 и u 1 = 3 может собрать все числа до 4, поэтому мы можем использовать u 2 = 9 для построения всех чисел до 9+ 4 = 13. Мы можем легко доказать, что последовательность u i = 3 i проверяет сумму (u i для i в [0, m-1]) = 1 + 3 + ... + 3 м-1 = (3 м - 1) / (3 - 1) = (u м - 1) / 2.
Таким образом, мы могли бы использовать u 0 = 1, u 1 = 3, u 2 = 9, u 3 = 27, чтобы построить все числа до 40, и, наконец, установить u 4 = 60.
Фактически, u 0 и u 1 может быть только 1 и 3, а u 2 может быть 8 или 9. Тогда, если u 2 == 8, u 3 может быть в [22 , 25] и, если u 2 == 9, u 3 может находиться в диапазоне [21, 27]. Верхний предел задается последовательностью 3 i , а нижний предел задается требованием строить числа до 12 с тремя числами и до 34 с четырьмя.
Код не использовался, но я думаю, что это намного быстрее и менее подвержено ошибкам. Теперь можно использовать Python, чтобы показать, что все числа до 100 могут быть построены из одного из этих наборов с использованием стратегии «разделяй и властвуй».