Jeżeli zsumujemy cyfry [u]dowolnej[/u] liczby (całkowitej), następnie zsumujemy cyfry sumy itd aż do chwili gdy uzyskamy jedną cyfrę, otrzymamy to samo co licząc (liczba-1) mod 9 + 1.
Wszystkie liczby (o odpowiedniej sumie cyfr) dadzą resztę z dzielenia przez 9 równą 7 (1+6).
Z tego wynika pomysł Wędrowca, możemy więc sprawdzać co 9 liczbę, czyli o tyle przyśpieszymy przeszukiwanie całego zakresu, ale i tak 10^15/9 do olbrzymia liczba.
Kłopot z moim rozwiązaniem polega na tym, że trzeba się spodziewać pytania: "A czy potrafisz udowodnić, że tak można?". I co wtedy?
Można podejść do tego inaczej.
Wszystkich sposobów na jakie można zapisać 16 jako sumę jest tylko 231, cześć nie będzie poprawna, ponieważ składniki nie mogą być większe od 9 oraz liczba składników nie może być większa od 15.
Np. 16=7+9, 7 możemy umieścić na dowolnej z 15 pozycji, 9 już tylko na 14 (albo odwrotnie), czyli liczb składających się z 7, 9 i 13 zer będzie 1514=210
16=7+5+4, takich liczb będzie 1514*13=2730
Tyle czynników ile składników, suma tych iloczynów to właśnie rozwiązanie.
Program, który znajdzie te 231 "rozkładów" będzie działał z pewnością szybciej niż sprawdzanie sumy cyfr wszystkich liczb aż do 10^15.