Klasyczne podejście w programowaniu wygląda tak:
Można wziąć po kolei każdą liczbę ze zbioru \(\displaystyle{ A}\) i sprawdzić, czy jest podzielna przez \(\displaystyle{ 3}\).
Jeśli nie jest, to zapisać ją w zbiorze \(\displaystyle{ B}\).
Następnie wziąć liczby ze zbioru \(\displaystyle{ B}\) i sprawdzić, czy są podzielne przez \(\displaystyle{ 5}\).
Jeśli dana liczba nie jest, zapisać ją w zbiorze \(\displaystyle{ C}\).
Następnie sprawdzić liczby w zbiorze \(\displaystyle{ C}\), czy są podzielne przez \(\displaystyle{ 7}\).
Jeśli nie, zapisać je w zbiorze \(\displaystyle{ D}\). Koniec.
Ale jak to zoptymalizować?
Możliwe, że można wykorzystać "symetrię" i zrobić zbiór \(\displaystyle{ A'}\) zawierający jedynie \(\displaystyle{ 52}\) elementy (na grafice jest "symetria" wokół niebieskiej linii). Następnie obliczyć odpowiednio zbiory \(\displaystyle{ B', C'}\) i \(\displaystyle{ D'. }\)
Potem zrobić "lustrzane odbicie" zbioru \(\displaystyle{ D'.}\)
Zbiór \(\displaystyle{ D'}\) oraz ten "lustrzany" są prawidłowym wynikiem.
Jeśli ktoś może podpowiedzieć lepszy sposób, będę wdzięczny
A jeśli ten sposób jest optymalny, to może da się go rozwinąć? Tych "symetrii" jest w większych zbiorach więcej, ale są tam pewne komplikacje.
Mnie interesują zbiory utworzone przez mnożenie kolejnych liczb pierwszych, czyli np. \(\displaystyle{ 3\cdot 5\cdot 7\cdot 11, 3\cdot 5\cdot 7\cdot 11\cdot 13, 3\cdot 5\cdot 7\cdot 11\cdot 13\cdot 17, 3\cdot 5\cdot 7\cdot 11\cdot 13\cdot 17\cdot 19}\) itd.
Może nie trzeba sprawdzać wszystkiego, tylko dzięki tej "symetrii", dzięki swoistym "fraktalom dzielników" da się sprawdzić małą część, a potem przez duplikowanie (z uwzględnieniem jakichś poprawek) uzyskać oczekiwany wynik?
Zadaję pytanie, ponieważ w modyfikacji algorytmu Fermata, o której pisałem w innym wątku, właśnie taki zbiór \(\displaystyle{ D, D''}\) itp. odgrywa zasadniczą rolę, a zakres zbioru jest ogromny (liczby stucyfrowe itd.).

