Ich versuche das folgende Problem mit Mathematica zu lösen:
Was ist die kleinste positive ganze Zahl, die nicht aus der Menge {2,3,4,5,6,7,8}
über die arithmetischen Operationen {+,-,*,/}
, Potenzierung und Klammern erhalten werden kann. Jede Nummer im Set muss genau einmal verwendet werden. Unäre Operationen sind NICHT erlaubt (1 kann nicht in -1 konvertiert werden, ohne beispielsweise eine 0 zu verwenden).
Zum Beispiel ist die Zahl 1073741824000000000000000
über (((3+2)*(5+4))/6)^(8+7)
erhältlich.
Ich bin ein Anfänger mit Mathematica. Ich habe Code geschrieben, der meiner Meinung nach die Probleme für die Menge {2,3,4,5,6,7}
löst (ich habe 2249 als meine Antwort erhalten), aber mein Code ist nicht effizient genug, um mit der Menge {2,3,4,5,6,7,8}
zu arbeiten. (Mein Code benötigt bereits 71 Sekunden, um auf dem Set {2,3,4,5,6,7}
zu laufen)
Ich würde sehr gerne irgendwelche Tipps oder Lösungen zur Lösung dieses schwierigeren Problems mit Mathematica oder allgemeine Erkenntnisse darüber, wie ich meinen bestehenden Code beschleunigen könnte, begrüßen.
Mein bestehender Code verwendet einen rekursiven Ansatz mit Brute-Force:
(* Dies definiert Kombinationen für eine Menge von 1 Zahl als die Menge dieser 1 Zahl *)
%Vor%(* testet, ob es in Ordnung ist, zwei Zahlen zu potenzieren, einschließlich (etwas) beliebiger Einschränkungen, um einen Überlauf * zu vermeiden)
%Vor%(* das nimmt eine Liste und entfernt Brüche mit Nennern größer als 100000 *)
%Vor%(* das definiert Kombinationen für eine Menge von 2 Zahlen - und gibt eine Menge aller möglichen Zahlen zurück, die durch Anwendungen von + - * / gefiltert durch Okto- und Bereinigungsregeln *) erhalten wurden.
%Vor%(* Dies erweitert Kombinationen, um mit Sets von Sets zu arbeiten *)
%Vor%(* für eine gegebene Menge, Partition gibt die Menge aller Partitionen in zwei nicht leere Teilmengen zurück *)
%Vor%(* Dies erweitert schließlich Kombinationen, um mit Mengen beliebiger Größe zu arbeiten *)
%Vor%Das ist nicht hilfreich, aber ich stehe heute unter meiner Quote für nutzloses Geplapper:
%Vor%Die allgemeine Idee hier ist es, Rechenleistungen zu vermeiden (die sind teuer und nicht-kommutativ), während gleichzeitig die Kommutativität / Assoziativität der Addition / Multiplikation zur Reduzierung der Kardinalität der Reichweite [].
Code oben auch verfügbar unter:
zusammen mit buchstäblich Gigabytes anderer nutzloser Code, Daten und Humor.
Tags und Links wolfram-mathematica