Schachcomputer.info Community

Schachcomputer.info Community (https://www.schachcomputer.info/forum/index.php)
-   Schach und künstliche Intelligenz, Knobeleien, Denkspiele / Chess and artificial intelligence (https://www.schachcomputer.info/forum/forumdisplay.php?f=54)
-   -   Mathe: Das 3n+1 / 5n+1 Problem (https://www.schachcomputer.info/forum/showthread.php?t=6905)

dreihirn 31.07.2023 13:15

Das 3n+1 / 5n+1 Problem
 
Auf das neue 3n+1 / 5n+1 Problem bin ich bei meinen
Bemühungen um das 3n+1-Problem gestossen.
Dies Problem ist eine 2-stufige Variante des bekannten 3n+1 Problems.

Es geht los mit einer ungeraden Zahl n.
Dazu bildet man 3*n+1.
Dann teilt man so oft durch 2, bis wieder eine
ungerade Zahl m entsteht.
Dazu bildet man dann 5*m+1.
Dann teilt man so oft durch 2, bis wieder eine
ungerade Zahl entsteht. Die ist das neu n.
Mit dem geht es wieder von vorne los.

Beispiel:

1 -> 4-2-1 -> 6-3
3 -> 10-5 -> 26-13
13 -> 40-20-10-5 -> 26-13

13 ist also eine Zahl, die auf sich selbst
abgebildet wird.

Auf sich selbst abgebildet werden auch 7 und 9.

7 -> 22-11 -> 56-28-14-7
und
9 -> 28-7 -> 36-18-9

Es kann natürlich auch längere Zyklen geben, wo es erst nach
mehreren Runden zur Ausgangszahl zurück läuft.

Aufgabe: Man finde (mit Computerhilfe) viele
veschiedene Zyklen, möglichst sogar "alle".


***********************************************

Vermutung: Für jede ungerade Startzahl n gibt
es einen Zyklus, in den diese Startzahl läuft.


Das Problem ist wohl härter als das klassische 3n+1-Problem,
weil hier nicht immer mit 3 multipliziert wird,
sondern abwechselnd mit 3 mit 5.

3*5=15 < 16. Weil in jedem Halbierungs-Abschnitt
im Durchschnitt zwei Mal durch 2 geteilt wird,
sollten große Startzahlen auf lange Sicht kleiner
gemacht werden (weil 3/4 * 5/4 < 1).

Ich bin gespannt, wer was mit Computerhilfe oder anders
herausfindet.

Ingo.

Hartmut 31.07.2023 16:36

AW: Das 3n+1 / 5n+1 Problem
 
Naja... wenn das Problem "härter" ist als das normale 3n+1 Problem (auch als Collatz-Problem bekannt) dann wird das wohl kaum einer lösen können. Selbst das Collatz-Problem selbst hat sich einer endgültigen Lösung bisher entzogen und gilt als eines der ungelösten Probleme der Mathematik.

Meines Wissens gibt es bisher nur eine Teillösung von Terence Tao.

https://arxiv.org/abs/1909.03562

Damit hat er sich dem Ursprungsproblem zwar angenähert, aber auch keine endgültige Lösung geliefert. Insofern dürfte auch die Erweiterung des Problems derzeit eher in die Kategorie "unlösbar" fallen.

dreihirn 31.07.2023 16:49

AW: Das 3n+1 / 5n+1 Problem
 
Hallo Hartmut,

Zitieren:

Zitat von Hartmut (Beitrag 118376)
Naja... wenn das Problem "härter" ist als das
normale 3n+1 Problem (auch als Collatz-Problem bekannt) dann wird das
wohl kaum einer lösen können.

Es geht mir nur ganz mittelbar um einen formalen Beweis.
Vielmehr spekuliere ich, dass es trotz 15/16 < 1 vielleicht
Startwerte gibt, die ins Unendliche laufen oder zumindest
sehr gross werden.
Das würde dann den bei vielen vorhandenen Glauben erschüttern,
dass alles nur von den Erwartungswerten (also 3/4 < 1 ...) abhängt.

Zitieren:

Meines Wissens gibt es bisher nur eine Teillösung von Terence Tao.
https://arxiv.org/abs/1909.03562
Es gibt etliche andere Teillösungen, unter anderem auch die
folgende von mir, bei der Zufall im Spiel ist:
Zu der aktuellen Zahl n bildet man entweder
3n+1
oder
3n-1
oder 3n+3
oder 3n-3,
und zwar jeden der Werte mit der gleichen
Wahrscheinlichkeit 1/4, unabhängig von früheren Interationen.
Dann halbiert man, bis man wieder ungerade ist.
Das Ganze endet, wenn man bei 0 oder 1 landet.

Ich habe einen Beweis, dass man für jeden ungeraden Startwert
n(0) mit Wahrscheinlichkeit 1 bei 0 oder 1 landet.


*******************************************

Hier ist eine einfachere Variante, ein dreistufiges Prinzip:
Aus n wird
3n+1, dann halbieren
dann wieder 3n+1, wieder halbieren
dann n+1, wieder halbieren
Man beweise, dass damit dadurch von allen Startwerten
aus zu ganz kleinen Werten gelangt.

Das ist plausibel, aber nicht trivial, weil
3*3*1 = 9 > 8 =2*2*2
Im schlimmsten Fall steigt man also mit
ganz vielen 9/8-Schritten nach unendlich auf.

In der Notation aus dem Threadtitel ist das das
3n+1 / 3n+1 / n+1 Problem.

Viele Grüße, ingo.

Hartmut 31.07.2023 17:32

AW: Das 3n+1 / 5n+1 Problem
 
Hi Ingo

Auf jeden Fall ein interessantes Problem. Ich bin zum ersten Mal in meiner Studienzeit da drauf gestoßen. Das gemeine an der Sache ist, dass es auf den ersten Blick nach einer Aufgabe aussieht, die eigentlich nach einer Lösung mittels vollständiger Induktion schreit... naja... leider nur auf den ersten Blick, aber als Erstsemester hab ich tatsächlich geglaubt, es ginge so oder ähnlich.

Mal sehen. Wenn ich Zeit habe, probiere ich mit dem Rechner mal aus was da so geht...

Gilgamesch 01.08.2023 17:59

AW: Das 3n+1 / 5n+1 Problem
 
Hallo Ingo,

Ich fand es ganz interessant, das mal auf die Schnelle zu programmieren.
Die Ergebnisse in der Liste fand ich teilweise etwas unintuitiv, vielleicht kannst du etwas dazu sagen.

- Kein Startwert divergiert (In den ersten Millionen)
- Jeder Startwert endet in einem Zyklus der entweder 5 oder 7 enthält.
- Nur sehr wenige Startwerte werden auf sich selbst abgebildet, aber auch diese Zyklen enthalten immer 5 oder 7.
- Ein wiederholter Startwert bedeutet keinen Zyklus, da für jede Zahl 2 Nachfolge Zahlen möglich sind. (?)
- Ab dem Startwert 22893989 sind auch nach längerer Berechnung keine Neuen mehr erschienen, die auf sich selbst abgebildet werden.

Hier eine Tabelle:

1. Startwert
2. Anzahl Durchgänge bis zur Wiederholung
3. Anzahl Durchgänge bis zum ersten Mal 5 oder 7 erscheint.
4. Die höchste vorkommende Zahl.

Code:

      5    10    10                40
      7      7      7                56
      9      7      4                36
      13      7      5                40
      95  1882  1895    2958675001976
    179  1882  1890    2958675001976
    6845    358    643        1343513920
    8717    358    602        1343513920
  12655    358    706    12477404903396
  18595    358    609        1343513920
  19177    358  1436    2958675001976
  20455    358  1442    2958675001976
  21155    358    621        1343513920
  23729    358    701    12477404903396
  30965    358    403        3351547840
  71915    358  1432    2958675001976
 2210633    358  1410      78373215640
 2581085    358  1638    2958675001976
 4324303    358    735        1343513920
 4920095    358    747        1343513920
 8108069    358    730        1343513920
 9225179    358    742        1343513920
12210127    358  1442      78373215640
13024135    358  1448      78373215640
22893989    358  1437      78373215640


Thomas

dreihirn 01.08.2023 18:32

AW: Das 3n+1 / 5n+1 Problem
 
Hallo Thomas,

danke für Dein Rechnen. Irgendwie scheinen wir verschiedene
Notationen zu haben. Bei mir ist
"*3+1, halbhalb..., *5+1, halbhalb..." eine Runde.

Da gibt es drei kurze Zyklen mit nur einer Runde:

7 -> 22-11 -> 56-7

9 -> 28-7 -> 36-9

13 -> 40-5 -> 26-13

Du scheinst einen weiteren Zyklus gefunden zu haben, der
in Deiner Notation Länge 358 hat. Wie sieht der denn aus?

Und in was läuft die "komische" 95 hinein?

**************************************

Eine Frage: Welche Arithmetik nutzt Du?
Wie gehst Du mit drohenden Overflows um?

Jürgen Dankert hat nicht für ganze Zahlen eine Speicherzelle spendiert,
sondern für jede Dezimalstelle einer Zahl. Addieren und Multiplizieren
tut er wie in Schulklasse 3 und 4.

Viele Grüße, Ingo.

Wandersleben 01.08.2023 18:39

AW: Das 3n+1 / 5n+1 Problem
 
Zitieren:

Zitat von Gilgamesch (Beitrag 118475)
- Ein wiederholter Startwert bedeutet keinen Zyklus, da für jede Zahl 2 Nachfolge Zahlen möglich sind. (?)

Hallo, Thomas,

das fragezeichen kannst du weglassen, eine wiederholte zahl kann ja einmal bei 3n+1 und dann auch bei 5n+1 auftauchen, die fortsetzung ist also nicht identisch.

Danke für deine schnelle programmierung des problems.
Kannst du eventuell eine datei anbieten, die einige durchgerechnete zahlenreihen wiedergibt?

Viele grüße
Horst

Gilgamesch 01.08.2023 21:07

AW: Das 3n+1 / 5n+1 Problem
 
1 Anhang/Anhänge
Hallo zusammen,

anbei eine Tabelle mit erweiterter Ausgabe:

1. Startwert
2. Anzahl aller Veränderungen des Wertes bis zur Wiederholung
3. Anzahl aller Veränderungen des Wertes bis zum ersten Mal 5 oder 7 erscheint.
4. Anzahl der Runden: "*3+1, halbhalb..., *5+1, halbhalb..."
5. Die höchste vorkommende Zahl.

Code:

      5    10    10      1                16
      7      7      7      1                56
      95  1882  1895    320    2958675001976
    179  1882  1890    319    2958675001976
    6845    358    643    107        1343513920
    8717    358    602    100        1343513920
  12655    358    706    117    12477404903396
  18595    358    609    101        1343513920
  19177    358  1436    241    2958675001976
  20455    358  1442    242    2958675001976
  21155    358    621    103        1343513920
  23729    358    701    116    12477404903396
  30965    358    403      66        3351547840
  71915    358  1432    240    2958675001976
 2210633    358  1410    235      78373215640
 2581085    358  1638    274    2958675001976
 4324303    358    735    121        1343513920
 4920095    358    747    123        1343513920
 8108069    358    730    120        1343513920
 9225179    358    742    122        1343513920
12210127    358  1442    240      78373215640
13024135    358  1448    241      78373215640
22893989    358  1437    239      78373215640


Ich nutze Integer Arithmetik, uint64_t entspricht unsigned integer 64 bit.
Overflows checke ich, indem ich überprüfe ob ich in der Nähe des maximalen 64 bit unsigned Integers bin:
18446744073709551615
Zur Zeit ist die Berechnung davon noch weit entfernt.

Die 95 wiederholt sich nach 320 Runden oder 1882 Veränderungen.
Das Ende (1. Counter, 2. Wert) sieht so aus (ab 0):
1881 95
1882 476
1883 238
1884 119
1885 358
1886 179
1887 896
1888 448
1889 224
1890 112
1891 56
1892 28
1893 14
1894 7

Angehängt habe ich die Datei 95.txt

Viele Grüße,
Thomas

Wandersleben 01.08.2023 21:39

AW: Das 3n+1 / 5n+1 Problem
 
Zitieren:

Zitat von Gilgamesch (Beitrag 118498)
Angehängt habe ich die Datei 95.txt

:goldcup:

dreihirn 01.08.2023 21:52

AW: Das 3n+1 / 5n+1 Problem
 
Hallo Thomas,

danke für die erweiterten Daten.

Zitieren:

Zitat von Gilgamesch (Beitrag 118498)
...
Die 95 wiederholt sich nach 320 Runden oder 1882 Veränderungen.
Das Ende (1. Counter, 2. Wert) sieht so aus (ab 0):
1881 95
1882 476 ...

Aber nur in der Mitte einer Iteration (als nächstes
wird *5 +1 genommen).

> ...1893 14
> 1894 7

Es landet also in der "Fixrunde 7".

Viele Grüße, Ingo.

dreihirn 01.08.2023 22:22

AW: Das 3n+1 / 5n+1 Problem
 
Hallo Thomas,

jetzt habe ich Deine Darstellungen besser einordnen können.
Du schriebst ja "bis zum ersten mal 5 oder 7 auftaucht".

Die 5 kommt in der Mitte der einen Runde zur 13 vor:
13 -> 40-20-10-5 -> 26-13

Und die 7 kommt in ihrer eigenen 1-Runden-"Lösung" vor
und in der Mitte der 1-Runden-Lösung zur 9:

9 -> 28-14-7 -> 36-18-9

Somit interpretiere ich, was Du gerechnet hast, so, dass es
zumindest bis 100 Millionen nur die drei Basiszykel zu 7, 9, 13 gibt.

Viele Grüße, Ingo.

Gilgamesch 02.08.2023 00:52

AW: Das 3n+1 / 5n+1 Problem
 
Zitieren:

Zitat von dreihirn (Beitrag 118507)
Somit interpretiere ich, was Du gerechnet hast, so, dass es
zumindest bis 100 Millionen nur die drei Basiszykel zu 7, 9, 13 gibt.

Hallo Ingo,

Ja genau, so war es gedacht.

Viele Grüße, Thomas

dreihirn 02.08.2023 07:34

AW: Das 3n+1 / 5n+1 Problem
 
Hallo Thomas,

ein paar Stunden habe ich gebraucht, um Deine
Daten zu verdauen - und bin mehr und mehr begeistert.
Startwert 95 im 3n+1/5n+1 ist ideal, wenn man als
Lehrer einer Vertretungsstunde einen Klugscheißer in
der Klasse hat.

Man erklärt der Klasse das 3n+1-Problem und läßt
"die Bestien" dann auf Startwert 27 los. Da braucht es
gut 100 "Einzel"schritte, um zur 1 zu gelangen. Nun
stelle man sich einen Schüler vor, der nach 7 oder 8
Minuten kräht, er habe es raus. Die anderen sind derweil
noch heftig am "arbeiten". Dem Überflieger gibt man dann
eine "kleine" Erweiterungsaufgabe:
Das 3n+1/5n+1-Problem mit Startwert 95 und verrät
ihm auch noch, dass am Ende 7 rauskommt. Er solle das
auch noch mal schnell verifizieren.

Hintergrund: Es gibt eine Leistungsszene im Kopfrechnen,
in der auch SchülerInnen und StudentInnen aus Jena vorne
dabei sind. Einer von denen wurde Weltmeister und sass
auch bei mir in der Vorlesung...

*****************************************

Ähnlich zu dem 3n+1/5n+1 ist das
15n+1/n+1-Problem:
Ungerades n wird mit 15 multipliziert, dann plus 1.
Runterhalbieren, bis ungerade.
Dann plus 1. Wieder runterhalbieren.
(Es ergibt sich der gleiche Quotient 15/16 wie beim 3/5-Problem.)

Gibt es da auch solch einen "Klugscheißer-Schreck" wie
die 95 bei 3/5 ?

Die ersten drei Werte geben übrigens 1-Zyklen:
1 -> 16-8-4-2-1 -> 2-1

3 -> 46-23 -> 24-12-6-3

5 -> 76-38-19 -> 20-10-5

Ob es weitere Zyklen gibt, weiß ich nicht.

Dank und viele Grüße, Ingo.

Gilgamesch 02.08.2023 12:06

AW: Das 3n+1 / 5n+1 Problem
 
Hallo zusammen,

ich muss eine kleinere (größere?) Korrektur an meiner Auswertung anbringen.

Zum Spaß hatte ich die Berechnungen mal mit einer C++ Library für 128 Bit Integers wiederholt, und Abweichungen festgestellt.
Es stellte sich heraus, das mein Check für einen 64-Bit Überlauf an einer Stelle um eine Zeile verrutscht war und deswegen nicht richtig griff.

Bereits ab dem Startwert 1489 kommt man in einen Bereich > 64 Bit, d.h. > 18446744073709551615.
Und schon ab 3859 wird auch der 128 Bit Bereich verlassen, d.h. > 340282366920938463463374607431768211455.

Für den Bereich 1489 - 3859 kommt aber offenbar auch alles zurück zu der "Fixrunde 7".

Ich vermute das sich das auch so fortsetzt, aber man bräuchte eine C++ Library für Integers beliebiger Größe um das zu überprüfen.
Solche Libraries gibt es, wenn ich dazu komme probiere ich das mal aus.

Viele Grüße, Thomas

dreihirn 02.08.2023 12:19

AW: Das 3n+1 / 5n+1 Problem
 
Hallo Thomas,

Zitieren:

Zitat von Gilgamesch (Beitrag 118515)
Und schon ab 3859 wird auch der 128 Bit Bereich verlassen, d.h. > 340282366920938463463374607431768211455.

wie war denn Dein bisheriges Programm mit den
Overflows umgegangen?

Dank und viele Grüße, Ingo.

dreihirn 02.08.2023 12:24

AW: Das 3n+1 / 5n+1 Problem
 
Liebe Leute, online bin ich in einem Schreib-Forum aktiv, wo jeden
Monat ein anderes Thema gegeben ist, zu dem Kurzgeschichten
mit höchstens 10.000 Zeichen gesucht werden. Für den August 2023
lautet das Thema "Dumm gelaufen." Dazu ist mir aus dem Stehgreif
folgende Geschiche eingefallen.

3n+1 für Klugscheißer
Ingo Althöfer
Eingereicht am 2. August 2023 beim Schreiblust-Wettbewerb.

Igor war ein Oberschlauer, zumindest in Mathe. Rechnen
konnte er wie ein Teufel, sei es im Kopf oder auf dem
Papier. Auf die Klassenkameraden in der 5c blickte er
mit Arroganz hinab.

Eines Tages gab es eine Vertretungsstunde durch den
Mathelehrer, Herrn Osterhage. Der wollte sich in der
Stunde nicht verausgaben und stellte zu Beginn eine
ganz einfache Rechenregel vor:

Wenn die aktuelle Zahl n ungerade ist, bildet man 3n+1.
Das Ergebnis ist eine gerade Zahl. Die teilt man so
lange durch 2, bis es nicht mehr geht. Dann bildet man
wieder „mal 3 plus 1“, teilt dann wieder durch 2, bis
es ungerade wird, usw. Hier habt ihr ein Beispiel:

1 -> 4 -> 2 -> 1.
Aha, von der 1 kommt man also ganz schnell wieder zur 1.

Probieren wir die 3.
3 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1.
Also führt auch die 3 nach kurzer Zeit zur 1.

Und wisst ihr was? Schlaue Leute vermuten, dass, egal
mit welcher ungeraden Zahl es losgeht, man immer zur 1
gelangt. Und jetzt seid ihr dran: Fangt, jeder für sich,
bei der 27 an und rechnet auf dem Papier, bis ihr bei
der 1 seid. Wer das als erster richtig fertig hat,
bekommt ein Duplo!

Das ließ Igor sich nicht zwei Mal sagen. Nach 6 Minuten
und 28 Sekunden [sic!] hatte er die vollständige Lösung
mit ihren 93 Schritten, während alle anderen noch mit
den Griffeln in der Hand schwitzten.

Igor rannte vor, um sich das Duplo abzuholen. Aber Herr
Osterhage hatte eine Überraschung für ihn in Petto. Leise,
um die anderen nicht zu stören, sagte er: „Gut gemacht,
Igor. Aber ich biete Dir ein Upgrade an: Statt des einen
Duplo bekommst Du drei, wenn Du die folgende etwas
schwerere Aufgabe löst.“

Beim 3n+1/5n+1-Problem passiert folgendes: Es geht mit
einer ungeraden Zahl n los. Dazu bildet man 3n+1 und
halbiert dann so oft, bis man wieder bei einer ungeraden
Zahl m ist. Dazu bildet man 5m+1 und halbiert wieder
runter bis zu einer ungeraden Zahl.

Hier ist ein einfaches Beispiel:
7 -> 22 -> 11 -> 56 -> 28 - > 14 -> 7.
Die 7 landet also nach einer Runde wieder bei sich selbst.
Wenn Du es schaffst, bis zum Ende der Stunde auszurechnen,
wie man ausgehend von der 95 zur 7 gelangt, bekommst Du
drei Duplos. Willst Du Dich darauf einlassen?

Igor, etwas zu laut: „Natürlich, da werde ich mich mal
etwas anstrengen. Super, drei Duplos für lau.“ Er begann
und rechnete und rechnete und rechnete ... und hörte auch
das Pausenklingeln nicht. Herr Osterhage kam zu ihm und
fragte: „Na Igor, wie weit bist Du?“ „Noch nicht ganz fertig.
Können Sie mich bitte in der Klasse einschließen? Die drei
Duplos bekomme ich doch auch, wenn ich es bis zum Ende der
großen Pause geschafft habe?! Bitte!“

Ossi tat ihm den Gefallen. Igor schaffte es aber nicht -
und musste sich zu Beginn der nächsten Stunde den Spott
der Klassenkameraden gefallen lassen.

*********************************************

Erläuterungen:

* Das 3n+1-Problem und die zugehörige Vermutung stammten
von Lothar Collatz aus dem Jahr 1937.

* Das 3n+1/5n+1-Problem hat der Klugscheißer Ingo A 2023
formuliert. Er hat auch die Vermutung aufgestellt, dass,
egal bei welcher ungeraden Zahl man beginnt, am Ende entweder
7 oder 9 oder 13 herauskommt.

* Die Identifizierung der 95 als besonders schwerer Startwert
für das 3n+1/5n+1-Problem gelang Thomas Zipproth.

* Die Lösung für 95 wird Ende des Monats August verraten.

* Ossi war der Lieblingslehrer von Ingo A. In acht der neun
Jahre auf dem Gymnasium unterrichtete er ihn in Mathe. Dieser
Fixpunkt half dem hyperaktiven Kind als stabilisierende Größe
im Schulalltag.

***************************
***************************

Herzliche Grüße, Ingo.

Gilgamesch 02.08.2023 16:57

AW: Das 3n+1 / 5n+1 Problem
 
1 Anhang/Anhänge
Hallo Ingo,

Open Source ist sowieso besser, deshalb im Anhang jetzt der komplette Source Code in C (auch zur Kontrolle) und das Ergebnis.
Der Code sollte mit den Kommentaren leicht verständlich sein und ist ja auch nur 60 Zeilen lang.

Man sollte halt nicht spät nachts oder in Zeitnot etwas programmieren, nur weil es einen interessiert.
Sollte ich nach 35 Jahren Software Entwicklung eigentlich wissen.

Ein Auszug aus dem Ergebnis:

1: Startwert
2: Anzahl Runden
3: Anzahl Veränderungen des Wertes
4: Größter vorkommender Wert

Code:

  5    1    5              16
  6    2    7              96
  7    2    6              56
  8    4    18              896
  9    1    3              28
  10    3    15              296
  11    5    27            1840
  12    7    39            1840
  13    1    4              40
  14    9    51            1840
  15    3    13              116
  16  15    84            19176
...
  91  20  116          1226576
  92    5    30            2080
  93    6    36            1840
  94  31  181          986976
  95  321  1894    2958675001976
  96  10    57            12640
  97    6    36            1840
...
 354  251  1485      78373215640
 355  30  177          986976
 356  30  177          986976
 357    2    17            1072
 358    2    17            5376
 359  20  118            19176
 360  11    66            62676
 361    4    26            4776
 362    9    53            12640
 363    9    53            19176
 364  31  183          111476
 365  20  118          1226576
 366    9    53            5496
 367  20  118          1226576
 368  20  118          291476
 369    5    32            2080
 370    9    53            9776
 371    5    32            7840
 372  Overflow

Die Overflows werden dann allmählich häufiger:

Code:

698  Overflow
 794  Overflow
1274  Overflow
1489  Overflow
1694  Overflow
1771  Overflow
2100  Overflow
2240  Overflow

Viele Grüße, Thomas

Hartmut 02.08.2023 18:32

AW: Das 3n+1 / 5n+1 Problem
 
Das Programm in FreeBasic würde etwa so aussehen:


Dim As UInt64 max64_3 = 18446744073709551615 / 3 - 1
Dim As UInt64 max64_5 = 18446744073709551615 / 5 - 1
Dim As UInt64 biggest_number
Dim As Integer runde

Function sequence(n As UInt64) As Integer
Dim As Integer count = 0
runde = 1
biggest_number = 0

Do
If n > max64_3 Then Return -1 ' Check auf Overflow (nach der Multiplikation)

n = 3 * n + 1
count += 1
If n > biggest_number Then biggest_number = n

While (n Mod 2) = 0
n /= 2
count += 1
Wend
If n < 8 Then Return count

If n > max64_5 Then Return -1 ' Check auf Overflow (nach der Multiplikation)

n = 5 * n + 1
count += 1
If n > biggest_number Then biggest_number = n

While (n Mod 2) = 0
n /= 2
count += 1
Wend
runde += 1
If n < 8 Then Return count

If count > 1000000 Then ' Infinite Loop
Return -2
End If
Loop
End Function

Sub Main()
Dim As UInt64 n
Dim As Integer count

For n = 5 To 372
count = sequence(n)
If count = -1 Then
Print n; " Overflow"
ElseIf count = -2 Then
Print n; " Infinite Loop"
Else
Print n; " "; runde; " "; count; " "; biggest_number
End If
Next
End Sub

Schaut für mich übersichtlicher aus als das C-Programm. Aber C war noch nie wirklich für übersichtlichen Quellcode bekannt, lach.

Für diejenigen, die sich in FreeBasic nicht so gut auskennen: count += 1 ist eine Kurzform für count = count + 1. Entsprechend bedeutet n /= 2 einfach n = n / 2

Ein entsprechendes Turbo-Pascal-Programm sieht ziemlich ähnlich aus, ich habe es aber nicht getestet.

program CollatzSequence;

uses
sysutils;

const
max64_3: UInt64 = 18446744073709551615 div 3 - 1;
max64_5: UInt64 = 18446744073709551615 div 5 - 1;

var
biggest_number: UInt64;
runde: Integer;

function Sequence(n: UInt64): Integer;
var
count: Integer;
begin
count := 0;
runde := 1;
biggest_number := 0;

repeat
if n > max64_3 then
Exit(-1); // Check auf Overflow (nach der Multiplikation)

n := 3 * n + 1;
Inc(count);
if n > biggest_number then
biggest_number := n;

while (n mod 2) = 0 do
begin
n := n div 2;
Inc(count);
end;
if n < 8 then
Exit(count);

if n > max64_5 then
Exit(-1); // Check auf Overflow (nach der Multiplikation)

n := 5 * n + 1;
Inc(count);
if n > biggest_number then
biggest_number := n;

while (n mod 2) = 0 do
begin
n := n div 2;
Inc(count);
end;
Inc(runde);
if n < 8 then
Exit(count);

if count > 1000000 then
Exit(-2); // Infinite Loop
until False;
end;

var
n: UInt64;
count: Integer;

begin
for n := 5 to 372 do
begin
count := Sequence(n);
if count = -1 then
WriteLn(n, ' Overflow')
else if count = -2 then
WriteLn(n, ' Infinite Loop')
else
WriteLn(n, ' ', runde, ' ', count, ' ', biggest_number);
end;
end.

Gilgamesch 02.08.2023 20:17

AW: Das 3n+1 / 5n+1 Problem
 
Stimmt, bei den Programmiersprachen gibt es ganz unterschiedliche Präferenzen.
Der komplette C Code, erzeugt denselben Output, mal etwas schwerer lesbarer ;)

#include"stdio.h"
#include"stdint.h"
#define z c++;if(n>b)b=n;while((n%2)==0){n/=2;c++;}
uint64_t u=18446744073709551615/3-1,v=18446744073709551615/5-1,b;int r;int s(uint64_t n){int c=0;r=1;b=0;
for(;; ){if(n>u)return-1;n=3*n+1;z if(n<8)return c;if(n>v)return-1; n=5*n+1;z r++;if(n<8)return c;if(c>1000000)return-2;}}
int main(){for(uint64_t n=5;n<373;n++){int c=s(n);if(c==-1)printf("%4I64u Overflow\n",n);
if(c==-2)printf("%4I64u Infinite Loop\n",n);if(c>=0)printf("%4I64u %4d %5d %16I64u\n",n,r,c,b);}}

dreihirn 02.08.2023 20:56

AW: Das 3n+1 / 5n+1 Problem
 
Liebe Leute,

Ihr kommt etwas vom Thema ab. Trotzdem möchte ich
auch eine Erinnerung beisteuern. Um 1990 herum war
ich in Kontakt mit Wolfgang Delmare, der damals auch
Schachprogrammierer war.

Im Gespräch erzählte er über ein abgebrochenes
Gespräch mit einem anderen Programmierer (Helmut
Horacek?). Auch wenn es vielleicht nicht Helmut war,
kürze ich ihn mal mit HH ab und Wolfgang mit WD.

HH: Wie lang ist denn Dein Schachprogramm?
WD: Meinst Du in Zeilen oder in Kommandos?
HH: Genau.
WD: Das ist aber nicht das Gleiche. Meinst Du Zeilen
oder meinst Du Kommandos?
HH: Aber man schreibt doch in jede Zeile nur ein Kommando.
WD: Ich nicht. Meist kriege ich zwei bis drei Kommandos in eine Zeile.

Wolfgang zu mir: An der Stelle brach HH das Gespräch ohne
weitere Erklärung ab.

********************************

Aus Interesse frage ich mal:

Was liefert das BASIC-Programm denn für Ergebnisse
für das 15n+1/n+1 -Problem?
Gibt es da auch so abgefahrene kleine Startwerte wie die 95
bei 3n+1/5n+1 ?

Neugierige Grüße, Ingo.

Hartmut 02.08.2023 21:13

AW: Das 3n+1 / 5n+1 Problem
 
Zitieren:

Zitat von dreihirn (Beitrag 118532)

Aus Interesse frage ich mal:

Was liefert das BASIC-Programm denn für Ergebnisse
für das 15n+1/n+1 -Problem?
Gibt es da auch so abgefahrene kleine Startwerte wie die 95
bei 3n+1/5n+1 ?

Neugierige Grüße, Ingo.

Das Basic-Programm ebenso wie das TurboPascal Programm sind - immer vorausgesetzt ich habe keinen Fehler gemacht - eins zu eins Umsetzungen des vorher geposteten C-Programms. Dementsprechend müssten sie auch dieselben Ergebnisse liefern.

Mein Post sollte nur helfen, den Code besser zu verstehen, da FreeBasic und Pascal als imperative Sprachen teilweise besser zu verstehen sind, wenn man in der C-Programmierung nicht so drin ist. Geht mir jedenfalls so.

dreihirn 02.08.2023 21:32

AW: Das 3n+1 / 5n+1 Problem
 
Hallo Hartmut,

wir schreiben aneinander vorbei.
Es ist mir egal, ob 15n+1/n+1 mit dieser oder jener Programmiersprache
attackiert wird. Ich traue Euch beiden zu, richtig zu programmieren.

Der Punkt ist: Ich habe zuletzt 1992 programmiert (Zillions ausgenommen,
aber das ist ja etwas anderes) und kann nicht mehr programmieren. Wobei
ich beim Betrachten von Programmcode schon noch die eine oder andere
Ungereimtheit erkenne.

Zur Erinnnerung: 15n+1/n+1 hat die drei Fixpunkte
1
3
5
(und vielleicht weitere).

Viele Grüße, Ingo.

Gilgamesch 02.08.2023 23:26

AW: Das 3n+1 / 5n+1 Problem
 
1 Anhang/Anhänge
Hallo Ingo,

diese Folge scheint wesentlich interessanter zu sein als die andere.
Es gibt bis jetzt die Fixpunkte: 1, 3, 5, 9, 31, 507
Der erste Overflow erfolgt bei 1799

Anbei wieder Code + Liste.

Ein Auszug aus der Liste:

1. Startwert
2. Anzahl Runden bis zum zweiten Erreichen des niedrigsten Wertes
3. Anzahl Veränderungen des Wertes bis zum zweiten Erreichen des niedrigsten Wertes
4. Niedrigster Wert der zweimal erreicht wird (Fixpunkt)
5. Höchster erreichter Wert

Code:

  1      1      6    1                  16
  3      2    11    3                  46
  5      2    11    5                  76
  7      4    24    3                766
  9      2    11    9                136
  11      3    18    5                316
  13      3    19    3                376
  15      5    31    3                856
  17      1    10    1                256
  19      2    12    9                286
  21      2    13    5                316
  23    16    95    9              800056
  25      2    14    3                376
  27      3    20    3                766
  29    173  1021  31          643680766
...
 129      6    40    3                1936
 131    17    105    3              37726
 133    175  1035  31          643680766
 135    44    257  507          122625406
...
1787    266  1578    9      42897306732256
1789    161    956  31          643680766
1791    19    119    9              800056
1793    19    119    9              800056
1795    19    119    9              800056
1797    194  1151  31          643680766
1799  Overflow

Viele Grüße, Thomas

dreihirn 14.08.2023 09:05

AW: Das 3n+1 / 5n+1 Problem
 
Liebe Leute,

nach wie vor sitze ich an Varianten des 3n+1-Problems.
Gestern abend ist das 5n+-1 Problem dazu gekommen.

Es geht los mit einer ungeraden Zahl n. Zu der bildet man
5n-1 und 5n+1. Dies sind beides gerade Zahlen. Eine von
ihnen ist durch 4 teilbar, die andere nur durch 2. Man nimmt
die Zahl, die durch 4 teilbar ist, und halbiert so lange, bis sich
eine ungerade Zahl ergibt. Von der aus startet die nächste Runde.

Beispiele:

1 -> (4 , 6) -> 4 -2 -1
Also ist 1 ein Fixpunkt.

7 -> (34 , 36) -> 36 - 18 - 9
9 -> (44 , 46) -> 44 - 22 - 11
11 -> (54 , 56) -> 56 - 28 - 14 - 7
Also ist 7-9-11-7 ein Zyklus.

Bis zum Startwert 109 habe ich keine weiteren Zykel gefunden.

Vermutung: Jeder Startwert läuft in einen Zyklus.
Frage: Sind 1 und 7-9-11 die einzigen Zyklen?

Dank im Voraus an alle, die ihre Engine-Bestien auf das Problem
loslassen!

Herzliche Grüße, Ingo.

Gilgamesch 14.08.2023 13:48

AW: Das 3n+1 / 5n+1 Problem
 
Hallo zusammen,

ich habe es mal schnell durchlaufen lassen (5n-1 und 5n+1), die Änderungen am vorigen Programmcode sind ja überschaubar.

Ergebnis:

1. Bis zum Startwert 1.000.000 treten nur die Fixpunkte 1 und 7 auf.
2. Die Folge konvergiert immer sehr schnell, der höchste vorkommende Wert ist nur maximal 10-15 mal größer als der Startwert.
3. Aufgrund von (2.) gibt es auch keine besonderen Ausreißer oder Überraschungen, alles läuft sehr schnell in 1 oder 7 rein.

Viele Grüße, Thomas


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:16 Uhr.

Powered by vBulletin (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
©Schachcomputer.info