Troszkę się nad tym wczoraj zastanawiałem i doszedłem do wniosku, że szukanie kolejnych liczb na podstawie podanej sprowadza się do znalezienia wektora, który jest prostopadły do pewnego określonego wektora i składa się z liczb naturalnych mniejszych od 10:
daną liczbę b, którą można zapisać w postaci ciągu cyfr b0,b1,b2,...,bn. Znalezienie liczby, która wygenerowałaby podaną liczbę b sprowadza się do znalezienia takiej liczby a (a0,a1,a2,...,am), że:
sum (ai10i) = sum(ai) * [sum(bi10</sup>i)]
sum(bi*10^i) to oczywiście liczba b, więc zapis można uprościć:
sum (ai*10^i) = sum(ai) * b
Lewą i prawą sumę można przedstawić w postaci iloczynu skalarnego wektorów:
a = [a0 a1 ... am]
d = [1 10 100 ... 10^m] (ten wektor ma być pionowy)
oraz
b = [b b b ... b] - m liczb b (ten też ma być pionowy)
Mamy równanie:
ad = ab
ad - ab = 0
a(d - b) = 0
Jest to wzór na iloczyn skalarny wektorów - wektor d - b jest z góry ustalony, pozostaje tylko znaleźć wektor a.
Przykład: jaka jest liczba 4-cyfrowa, która wygeneruje liczbę 81 (?-81-9-1) ?
mamy: a = [a0 a1 a2 a3], d = [1 10 100 1000], b = [81 81 81 81]
a(d - b) = 0
[a0 a1 a2 a3] * ([1 10 100 1000] - [81 81 81 81])T = 0 (T - transpozycja)
[a0 a1 a2 a3] * [-80 -71 19 919]T = 0
-80a0 -71a1 + 19a2 + 919a3 = 0.
Jednym z rozwiązań jest a0 = 8, a1 = 5 a2 = 4 a3 = 1 czyli liczba 1458.
Pytanie brzmi: czy dla dowolnej liczby b można znaleźć m-cyfrowy ciąg a, który będzie spełniał powyższy warunek i który będzie przedstawiał liczbę?