Само доказательство:
Проверим что числа от 8 до 19 действительно можно представить в виде сумм 3 и 5: x = 3n + 5к
8=(3*1+5*1)
9 =(3*3+5*0)
10=(3*0+5*2)
11=(3*2+5*1)
12=(3*4+5*0)
13=(3*1+5*2)
14=(3*3+5*1)
15=(3*5+5*0)
16=(3*2+5*2)
17=(3*4+5*1)
18=(3*1+5*3)
19=(3*3+5*2)
Любое число больше 19 также можно представить с помощью цифр 8,9,10...19
20 = 10+10
21 = 11+10
22 = 11+11
....
29 = 19+10
Утверждение становится очевидным, если вспомнить формулу представления десятичных чисел: х = εrsr + εr -1sr -1 + … + ε1s1 + ε 0s0 + ε1s1 + ε -1s -1+ ε - 2s -2 + …
Для дальнейшего представления натуральных положительных чисел > 20 хватит и этого набора:
10=(3*0+5*2)
11=(3*2+5*1)
12=(3*4+5*0)
13=(3*1+5*2)
14=(3*3+5*1)
15=(3*5+5*0)
16=(3*2+5*2)
17=(3*4+5*1)
18=(3*1+5*3)
19=(3*3+5*2)
т.к. включает он в себя весь необходимый набор цифр 10Х(0,1,2,3,4,5,6,7,8,9).
P.S.
Доказательство, строго говоря, математически не корректно, но зато понятно.
С помощью матиндукции было бы правильнее, но... если кому надо, вспомню, напишу.
&НаКлиенте
Перем СоответсвиеПервых12,СоответсвиеПервых12плюс;
&НаКлиенте
Процедура Разложить(ЧислоДляРазложения)
Если ЧислоДляРазложения<8 Тогда
Объект.Ряд = "Меньше 8!";
Объект.РядРекурсирвно = "Меньше 8!";
Объект.РядБезУмножения = "Меньше 8!";
Возврат;
КонецЕсли;
Если ЧислоДляРазложения<20 Тогда
Объект.Ряд = СоответсвиеПервых12[ЧислоДляРазложения];
Иначе
Остаток = ЧислоДляРазложения%10;
Если Остаток = 0 Тогда
Объект.Ряд = "" + ЧислоДляРазложения/10 +"*"+ СоответсвиеПервых12[10]
Иначе
Кратно10 = ЧислоДляРазложения - (10+Остаток);
Объект.Ряд = "" + Кратно10/10 + "*" + СоответсвиеПервых12[10] + " + " + СоответсвиеПервых12[10+Остаток];
КонецЕсли;
КонецЕсли;
Объект.РядРекурсирвно = РазложитьРекурсивно(ЧислоДляРазложения);
Объект.РядБезУмножения = РазложитьБезУмножения(ЧислоДляРазложения);
КонецПроцедуры
&НаКлиенте
Функция РазложитьБезУмножения(ЧислоДляРазложения)
Если ЧислоДляРазложения<20 Тогда
Возврат СоответсвиеПервых12плюс[ЧислоДляРазложения];
Иначе
Ряд="";
Остаток = ЧислоДляРазложения%10;
ЧислоДесяток = ?(Остаток=0,ЧислоДляРазложения/10,(ЧислоДляРазложения - (10+Остаток))/10);
Если ЧислоДляРазложения>1000 Тогда
Ряд = ""+Числодесяток+"*("+СоответсвиеПервых12плюс[10]+")";
Возврат ?(Остаток = 0, Ряд, Ряд + "+" + СоответсвиеПервых12плюс[10+Остаток])
Иначе
Для сч = 1 По ЧислоДесяток Цикл
Ряд = Ряд + СоответсвиеПервых12плюс[10] + "+";
КонецЦикла;
Возврат ?(Остаток = 0, Лев(Ряд,СтрДлина(Ряд)-1), Ряд + СоответсвиеПервых12плюс[10+Остаток]);
КонецЕсли;
КонецЕсли;
КонецФункции
&НаКлиенте
Функция РазложитьРекурсивно(ЧислоДляРазложения)
Если ЧислоДляРазложения<8 Тогда
Возврат ЧислоДляРазложения;
ИначеЕсли ЧислоДляРазложения<20 Тогда
Возврат ""+СоответсвиеПервых12[ЧислоДляРазложения];
Иначе
Остаток = ЧислоДляРазложения%10;
Если Остаток = 0 Тогда
Возврат "" + РазложитьРекурсивно(ЧислоДляРазложения/10) +"*" + СоответсвиеПервых12[10]
Иначе
Кратно10 = ЧислоДляРазложения - (10+Остаток);
Возврат "(" + РазложитьРекурсивно(Кратно10/10) + "*" + СоответсвиеПервых12[10] + " + " + СоответсвиеПервых12[10+Остаток]+")";
КонецЕсли;
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура ПриОткрытии(Отказ)
СоответсвиеПервых12 = Новый Соответствие;
СоответсвиеПервых12.Вставить(8 ,"(3*1+5*1)");
СоответсвиеПервых12.Вставить(9 ,"(3*3+5*0)");
СоответсвиеПервых12.Вставить(10,"(3*0+5*2)");
СоответсвиеПервых12.Вставить(11,"(3*2+5*1)");
СоответсвиеПервых12.Вставить(12,"(3*4+5*0)");
СоответсвиеПервых12.Вставить(13,"(3*1+5*2)");
СоответсвиеПервых12.Вставить(14,"(3*3+5*1)");
СоответсвиеПервых12.Вставить(15,"(3*5+5*0)");
СоответсвиеПервых12.Вставить(16,"(3*2+5*2)");
СоответсвиеПервых12.Вставить(17,"(3*4+5*1)");
СоответсвиеПервых12.Вставить(18,"(3*1+5*3)");
СоответсвиеПервых12.Вставить(19,"(3*3+5*2)");
СоответсвиеПервых12плюс = Новый Соответствие;
СоответсвиеПервых12плюс.Вставить(8 ,"3+5");
СоответсвиеПервых12плюс.Вставить(9 ,"3+3+3");
СоответсвиеПервых12плюс.Вставить(10,"5+5");
СоответсвиеПервых12плюс.Вставить(11,"3+3+5");
СоответсвиеПервых12плюс.Вставить(12,"3+3+3+3");
СоответсвиеПервых12плюс.Вставить(13,"3+5+5");
СоответсвиеПервых12плюс.Вставить(14,"3+3+3+5");
СоответсвиеПервых12плюс.Вставить(15,"5+5+5");
СоответсвиеПервых12плюс.Вставить(16,"3+3+5+5");
СоответсвиеПервых12плюс.Вставить(17,"3+3+3+3+5");
СоответсвиеПервых12плюс.Вставить(18,"3+5+5+5");
СоответсвиеПервых12плюс.Вставить(19,"3+3+3+5+5");
КонецПроцедуры
&НаКлиенте
Процедура ЧислоДляРазложенияИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Разложить(Число(Текст));
КонецПроцедуры