Po 60 latach rozwiązano równanie x3+y3+z3=33
Profesor matematyki Andrew Booker z University of Bristol rozwiązał zagadkę matematyczną sprzed 64 lat. Zagadka brzmi: jak wyrazić liczbę 33 za pomocą sumy trzech liczb podniesionych do potęgi trzeciej. Równanie wygląda w następujący sposób: x3+y3+z3=33 i jest przykładem równania diofantycznego. Nazwano je tak od imienia greckiego matematyka Diofantosa z Aleksandrii, który przed 1800 lat zaproponował podobne równania.
Na przykład jeśli k=8, to równanie wygląda następująco 23+13+(-1)3=8.
Matematycy, którzy mierzą się z równaniami diofantycznymi, wiedzą na przykład, że liczby, z których po podzieleniu przez 9 pozostaje reszta 4 lub 5, nie mogą być rozwiązane za pomocą równań diofantycznych. To wyklucza 22 liczby z przedziału od 1 do 100. Jednak 78 pozostałych liczb powinno mieć rozwiązania. Dotychczas nie udało się znaleźć rozwiązania dla 33 i 42.
Booker chciał znaleźć nowe rozwiązania dla wszystkich liczb mniejszych niż 100, dla których rozwiązania można znaleźć. Stworzył więc algorytm komputerowy, którego zadaniem było rozwiązanie równania x3+y3+z3=k, a który mógł za „x”, „y” oraz „z” podstawiać liczby o wartości do 1016. Uczony przyznaje, że nie spodziewał się, że znajdzie też pierwsze w historii rozwiązanie dla k=33. Równanie wygląda następująco: (8.866.128.975.287.528)3 + (–8.778.405.442.862.239)3 + (–2.736.111.468.807.040)3 = 33
Zatem z zakresu od k=1 po k=100 pozostała jeszcze jedna nierozwiązana liczba – 42. Dzięki pracy Bookera wiadomo, że do jej rozwiązania trzeba użyć liczb większych niż 1016.
Komentarze (43)
Jajcenty, 8 kwietnia 2019, 11:15
Przypadek? Nie sądzę.
Na pierwszy rzut oka zadanie nie wydaje się bardzo złożone obliczeniowo, ale po chwili liczenia, przestrzeń ma 8*1048 punktów. Nie wróżę sukcesów brute force'om
Afordancja, 8 kwietnia 2019, 12:40
Niby ciężko ale spróbować zawsze warto, ba nawet "raz"| spróbuję (nie znałem tej klasy problemów)
[edit]
Ciekawe czy da się chociaż "trochę" to jakoś zoptymalizować
wilk, 8 kwietnia 2019, 13:34
Da się brute tylko trochę inaczej. Zauważ, że tutaj sprowadzone jest to do +--, pierw dwie duże liczby, o przeciwnym znaku (pierwsza większa), a trzecią zbliżasz się do wyniku. Można sobie wygenerować kilka milionów takich liczb, wybrać obiecujących kandydatów (biorąc pod uwagę zasady podnoszenia do sześcianu) i następnie je korygować. Szukanie wyniku metodą gradientową.
Afordancja, 8 kwietnia 2019, 13:58
hm..w zasadzie to mamy tu zawsze kombinacje.
dwie ujemne jedna dodatnia
dwie dodatnie jedna ujemna
a no tak ok, czyli 2 o przeciwnym znaku i trzecia o dowolnym
ok, tutaj muszę doczytać, bo nie znam na ten moment zasad które by mi pomogły
Rozumiem, ale nie jestem takim optymistą,
(z resztą chyba tak będę liczył )
Dziś wieczorem przysiądę, pomyślę i jak dobrze pójdzie to jutro odpalę na parę godzin kompa z liczeniem na sępa, że trafię, nie trafię to cóż...kto nie próbuje. ten nigdy nie trafi
Jajcenty, 8 kwietnia 2019, 14:42
Zastanów się (ja się zastanawiam) jak wykorzystać informację, że w przedziale [-1016 ; 1016] NIE MA rozwiązania. To eliminuje z obliczeń sporo punktów. Powinno się dać to jakoś wykorzystać.
Moja druga myśl. Korzystając z ciągłości n3 można te minima dość szybko znajdować.
Afordancja, 8 kwietnia 2019, 15:47
A ja ciągle jestem bardzo sceptyczny jeśli chodzi o Twój optymizm
Będziemy zazwyczaj po prostu "przeskakiwać" ten prawidłowy wynik. Tak jak w zwykłej faktoryzacji
Tak to jedyna dająca nadzieję wiadomość. Jednak wykluczone jest to, że wszystkie 3 są w tym zakresie, ale 2 już mogą być. Ułatwia ale nie aż tak bardzo jak by się mogło wydawać.
No nic wieczorem zrobię sobie burzę mózgu
Afordancja, 8 kwietnia 2019, 19:48
[edit]
Wiele nie wydumałem na razie, po za tym, że co najmniej 2 liczby z trzech, muszą mieć resztę z dzielenia przez 3 wynoszącą 2. Idę dalej dumać
Mariusz Błoński, 8 kwietnia 2019, 20:02
Jak rozwiążecie, to pamiętajcie, żeby nagrodą i fejmem podzielić się ze źródłem inspiracji.
radar, 9 kwietnia 2019, 01:02
Ja również nie znałem tej klasy problemów.
Challenge accepted
Mariusz, podzielę się jak napiszecie artykuł o tego typu ciekawostkach matematyczo-algorytmicznych
Ergo Sum, 9 kwietnia 2019, 01:09
Przecież nie ważne ile jak na "plus" a ile na "minus" - po prostu wystarczy sztywne założenie 2+ i 1- i obliczać moduł.
Dzięki temu nie trzeba się bawić ze zmienianymi działaniami. Radykalnie się zmniejsza ilość kombinacji. Potem wystarczy przestawić.
radar, 9 kwietnia 2019, 01:15
Dokładnie, a wydaje mi się, że jest jeszcze jednak optymalizacja... musze sprawdzić
thikim, 9 kwietnia 2019, 10:02
Zatem z zakresu od k=1 do k=50 pozostaje jeszcze jedna nierozwiązana liczba - 42. Przypadek?
Zatem z zakresu od k=1 do k=60 pozostaje jeszcze jedna nierozwiązana liczba - 42. Przypadek?
Zatem z zakresu od k=1 do k=69 pozostaje jeszcze jedna nierozwiązana liczba - 42. Przypadek?
Zatem z zakresu od k=1 do k=77 pozostaje jeszcze jedna nierozwiązana liczba - 42. Przypadek?
Zatem z zakresu od k=1 do k=88 pozostaje jeszcze jedna nierozwiązana liczba - 42. Przypadek?
Zatem z zakresu od k=1 do k=99 pozostaje jeszcze jedna nierozwiązana liczba - 42. Przypadek?
A ile jest przypadków do k=1000? Same przypadki.
W zasadzie możecie to inaczej zrobić.
Róbcie kolejne liczby do sześcianu a wyniki <100 zapamiętujcie i zliczajcie. Rozkład liczbowy może być ciekawy.
Afordancja, 9 kwietnia 2019, 10:10
Jeżeli nawiązujesz do wypowiedzi @Jajcenty to myśle, że jednak "przypadek" odnosił się do samej liczby 42 ( https://pl.wikipedia.org/wiki/Wielkie_pytanie_o_życie,_wszechświat_i_całą_resztę ) a nie do samego zakresu.
thikim, 9 kwietnia 2019, 10:13
Błędnie założyłeś że nie wziąłem tego pod uwagę.
To teraz wiedząc że ja wiedziałem o tym odniesieniu - przeczytaj jeszcze raz mój post
Bo dlaczego niby ma decydować do k=100? A może powinno być do k=666? (a tam raczej więcej jest takich liczb).
No ale gdyby się okazało że 42 jest jedyną liczbą do k-nieskończoności - to przyznaję - całkowicie się pomyliłem.
Afordancja, 9 kwietnia 2019, 10:18
Ok to za glupi jestem. Bo nie widzę w tym wiekszej logiki
thikim, 9 kwietnia 2019, 10:19
No właśnie ja też i o tym pisałem.
PS. I widzę dwuznaczność tej odpowiedzi i wieloznaczność poprzedniej - zanim ją mi tu ktoś odkrywczo wypomni.
Afordancja, 9 kwietnia 2019, 10:19
O widzę edycję.
Juz tłumacze. Chodzi o kontekst.autor chciał policzyc wszystkie możliwe do stu i została 42. Koniec.
Edit
I z wszystkich możliwych dwucyfrowych została 42 przypadek ?
thikim, 9 kwietnia 2019, 10:22
Jakby liczył do 69 - też by została tylko 42
Afordancja, 9 kwietnia 2019, 10:23
Ale chciał wyczerpać dwucyfrowe
pogo, 11 kwietnia 2019, 14:07
Mam pewien pomysł na optymalizację.
Jak trafimy -42, to zmieniamy znaki i jest już wynik +42. Jeśli dobrze liczę daje to możliwość przeszukania absolutnie wszystkich możliwości... aż do limitu naszej cierpliwości lub pamięci komputera.
x zawsze będzie największą liczbą w zestawie i to jest ok, bo dodawanie i tak jest przemienne.
Jest szansa zmieścić się w typie long, który prawie sięga 1019. Ale sześciany tych liczb i tak się nie załapią, więc to chyba nic nie zmieni...
I tak stawiam, że po godzinie wciąż będziemy daleko od 1015...
Afordancja, 11 kwietnia 2019, 14:54
A jesteś w stanie sprawdzić w jakim czasie jesteś stanie sprawdzić (na jednym rdzeniu i w ogóle bez fanaberii) "iterację" dla jednego ixa? Bo testowałem (co prawda teraz w pythonie ćwiczę sobie więc słabo o efektywność) i idzie to jakoś wolno.
Tzn. teraz mam całkiem inne podejście. Nawet w sumie dwa równoległe pomysły. Jeden podobny do Twojego. Czyli wyznaczam X i dla niego szukam, ale to też nie wygląda aby miało iść super szybko (ale nie sprawdzałem tak dokładnie, bo skupiam się na tym drugim podejściu)
Jajcenty, 11 kwietnia 2019, 15:27
Na moje oko szukasz minimum F(x) = x^3 + (-x/2)^3 - 42 czyli zwykła optymalizacja. Wada jest taka, że x musi być sześcianem x = c^3, gdzie c - liczba całkowita.
Afordancja, 11 kwietnia 2019, 17:41
Ale jak to? Jak to sprowadzileś do jednej niewiadomej? To mi sie wydaje strasznie łatwo obliczane. (Albo czegoś nie dostrzegam jak wrócę do domu to spróbuje
Jajcenty, 11 kwietnia 2019, 18:43
Nie ja. @pogo
założył że rozwiązanie ma postać: x^3 + (-x/2)^3 + z^3 = 42. Jeśli dobrze zrouzmiałem....