Die Mathe-Redaktion - 28.02.2020 22:57 - Registrieren/Login
Auswahl
ListenpunktHome
ListenpunktAktuell und Interessant ai
ListenpunktArtikelübersicht/-suche
ListenpunktAlle Links / Mathe-Links
ListenpunktFach- & Sachbücher
ListenpunktMitglieder / Karte / Top 15
ListenpunktRegistrieren/Login
ListenpunktArbeitsgruppen
Listenpunkt? im neuen Schwätz
ListenpunktWerde Mathe-Millionär!
ListenpunktFormeleditor fedgeo
Schwarzes Brett
Aktion im Forum
Suche
Stichwortsuche in Artikeln und Links von Matheplanet
Suchen im Forum
Suchtipps

Bücher
Englische Bücher
Software
Suchbegriffe:
Mathematik bei amazon
Naturwissenschaft & Technik
In Partnerschaft mit Amazon.de
Kontakt
Mail an Matroid
[Keine Übungsaufgaben!]
Impressum

Bitte beachten Sie unsere Nutzungsbedingungen, die Distanzierung, unsere Datenschutzerklärung und
die Forumregeln.

Sie können Mitglied werden. Mitglieder können den Matheplanet-Newsletter bestellen, der etwa alle 2 Monate erscheint.

Der Newsletter Okt. 2017

Für Mitglieder
Mathematisch für Anfänger
Wer ist Online
Aktuell sind 452 Gäste und 21 Mitglieder online.

Sie können Mitglied werden:
Klick hier.

Über Matheplanet
 

Antworte auf:  Alternativer Collatzalgorithmus von blindmessenger
Forum:  Algorithmen / Datenstrukturen, moderiert von: matroid

[Zur Forum-Gliederung] [Wie man Fragen beantwortet]

  Alle registrierten Mitglieder können Mitteilungen schreiben.
Benutzername:
Passwort:
Nachricht-Icon:                   
                  
              
Nachricht:


 
 


Eingabehilfen (JavaScript): [Link extern intern] [MathML?] [$$?]
[fed-Bereich] [LaTeX-inline] [LaTeX-display] [Tikz] [hide-Bereich][show-Bereich] [Quelltext [num.]][?]
 Zeige Vorschau      Schreibe im fedgeoFormeleditor oder mit Latex.

Smilies für Deine Nachricht: 😃 😄 😁 🙂 🙃 😉 🤗 🤫 🤔 🙄 😴
🤒 😎 😮 😲 😖 😒 😐 😡 👌 👍 👎 🤢 🤧 🥵 🥶 😵 🤯 😛
Optionen: Deaktiviere HTML in dieser Nachricht
Deaktiviere MATHML in dieser Nachricht. Wenn Dein Text $-Zeichen enthält, die nicht LaTeX-Formeln begrenzen.
Deaktiviere Smilies in dieser Nachricht
Zeige die Signatur (Kann in 'Mein Profil' editiert werden.)
    [Abbrechen]
 
Beachte bitte die [Forumregeln]


Themenübersicht
blindmessenger
Aktiv
Dabei seit: 02.08.2016
Mitteilungen: 997
Herkunft: Sachsen
 Beitrag No.47, eingetragen 2019-11-17 16:35    [Diesen Beitrag zitieren]

Wenn man das mal ein bißchen ausformuliert sieht es so aus:

$6(\frac{x-3}{4})+5=\frac{3x+1}{2}$

$6(\frac{x-1}{8})+1=\frac{3x+1}{4}$

$6(\frac{x-13}{16})+5=\frac{3x+1}{8}$

$6(\frac{x-5}{32})+1=\frac{3x+1}{16}$

...

Ergibt:

$\frac{3}{2}x+\frac{1}{2}=\frac{3}{2}x+\frac{1}{2}$

$\frac{3}{4}x+\frac{1}{4}=\frac{3}{4}x+\frac{1}{4}$

$\frac{3}{8}x+\frac{1}{8}=\frac{3}{8}x+\frac{1}{8}$

$\frac{3}{16}x+\frac{1}{16}=\frac{3}{16}x+\frac{1}{16}$

...

 😄


blindmessenger
Aktiv
Dabei seit: 02.08.2016
Mitteilungen: 997
Herkunft: Sachsen
 Beitrag No.46, eingetragen 2019-11-16 19:20    [Diesen Beitrag zitieren]

2019-11-16 18:43 - geroyx in Beitrag No. 45 schreibt:
Lieber querin,

es wäre nette, wenn Du die vermutete Vereinfachung in #41 ergänzen könntest, für die Sage-Enthusiasten.


Am Rande: Ja und? Ist jetzt die Collatz-Vermutung damit gelöst, oder was?  😄

Natürlich nicht...

Aber wir sind dran...  😉


Ehemaliges_Mitglied
 Beitrag No.45, eingetragen 2019-11-16 18:43    [Diesen Beitrag zitieren]

Lieber querin,

es wäre nette, wenn Du die vermutete Vereinfachung in #41 ergänzen könntest, für die Sage-Enthusiasten.


Am Rande: Ja und? Ist jetzt die Collatz-Vermutung damit gelöst, oder was?  😄


blindmessenger
Aktiv
Dabei seit: 02.08.2016
Mitteilungen: 997
Herkunft: Sachsen
 Beitrag No.44, eingetragen 2019-11-14 19:09    [Diesen Beitrag zitieren]

)
2019-11-14 18:32 - querin in Beitrag No. 43 schreibt:
2019-11-14 18:24 - blindmessenger in Beitrag No. 42 schreibt:
Kannst Du kurz nochmal die Bildungsvorschrift für die "mystischen Zahlen" mathematisch darstellen?

siehe hier

Ja genau...


querin
Aktiv
Dabei seit: 12.01.2018
Mitteilungen: 295
Herkunft:
 Beitrag No.43, eingetragen 2019-11-14 18:32    [Diesen Beitrag zitieren]

2019-11-14 18:24 - blindmessenger in Beitrag No. 42 schreibt:
Kannst Du kurz nochmal die Bildungsvorschrift für die "mystischen Zahlen" mathematisch darstellen?

siehe hier


blindmessenger
Aktiv
Dabei seit: 02.08.2016
Mitteilungen: 997
Herkunft: Sachsen
 Beitrag No.42, eingetragen 2019-11-14 18:24    [Diesen Beitrag zitieren]

@Geroyx und @querin

Danke euch für die Mühe...

Und cool querin dass Dein Code wirklich jede Zahl erwischt...

Kannst Du kurz nochmal die Bildungsvorschrift für die "mystischen Zahlen" mathematisch darstellen?


Ehemaliges_Mitglied
 Beitrag No.41, eingetragen 2019-11-14 17:38    [Diesen Beitrag zitieren]

Ach, das ist aber nett.

So, diesen Befehl habe ich gesucht print(c.replace("\n",", ")), das heißt, die newline wird durch ein Komma plus Leerstelle ersetzt.

Da zeilengetrennte Ausgabe m.W. der Default ist, müsste in folgendem Code noch eine Vereinfachung möglich sein.

Jedenfalls wird es jetzt so ausgegeben, wie ich mir das vortselle:
Display: kommagetrennt (zwecks Übersicht).
Ausgabe-Datei: zeilengetrennt.


Die Ausgabe-txt ist nicht zum Lesen.... So: "Ach, wie zauberhaft!"
Das ist zum Weiterverarbeiten! Und in der txt-Ausgabedatei macht eine kommagetrennte Liste überhaupt keinen Sinn! Wie soll ich denn da mit einem anderem Programm etwas einfach rauslesen?!

Das habe ich jetzt aber 5-mal vorgetragen, das ist jetzt höffentlich auch mal bei den Zaubärhaftis angekommen.

Noch ein letzter Punkt: Ich finde es grundsätzlich schön, wenn man die Eingangsparameter ganz am Anfang hinschreibt, und nach denen nicht in irgendwelchen längeren Codes ewig suchen muss.
Das sind halt alles solche Minimalansprüche, die man an sich selbst haben kann oder nicht...  

So, jedenfalls danke. Wie gesagt, eine Vereinfachung in der Syntax müsste noch möglich sein.
Sage
U = 155  # Den Algorithmus durchlaufende Zahl
def collatz(u):
    r,p=1,2
    while 1:
        r=(-r)%6
        a=(p*r-1)//3
        p*=2  
        if (u-a)%p==0:
            return 6*((u-a)//p)+r
def f(u):
    c=str(u)
    while u>1:
        u=collatz(u)
        c+='\n'+str(u)
#    print(c)                       # alt
    print(c.replace("\n",", "))     # neu
    with open('collatz_{}.txt'.format(U), 'w') as fp:
        fp.write(c)
#collatz(U)
f(U)
155, 233, 175, 263, 395, 593, 445, 167, 251, 
377, 283, 425, 319, 479, 719, 1079, 1619, 
2429, 911, 1367, 2051, 3077, 577, 433, 
325, 61, 23, 35, 53, 5, 1
Out[Display]
155
233
175
263
395
593
...
 Out[collatz155.txt]









querin
Aktiv
Dabei seit: 12.01.2018
Mitteilungen: 295
Herkunft:
 Beitrag No.40, eingetragen 2019-11-14 16:24    [Diesen Beitrag zitieren]

Hallo blindmessenger,

meine Funktion liefert korrekte Ergebnisse für alle ungeraden Zahlen. Du kannst selbst testen, indem du folgenden Code kopierst und hier im main.py Fenster einfügst und dann auf "run" klickst.
python
def collatz(u):
    r,p=1,2
    while 1:
        r=(-r)%6
        a=(p*r-1)//3
        p*=2  
        if (u-a)%p==0:
            return 6*((u-a)//p)+r
 
def f(u):
    c=str(u)
    while u>1:
        u=collatz(u)
        c+=', '+str(u)
    print(c)
    with open('collatz_{}.txt'.format(u), 'w') as fp:
        fp.write(c)
 
#collatz(155)
f(155)

Natürlich ist 155 nur ein Beispiel und kann durch jede andere ungerade Zahl ersetzt werden. Der Funktionsaufruf von collatz(155) ist auskommentiert; bei Bedarf einfach das #-Zeichen entfernen (und vor f(155) setzen).



Ehemaliges_Mitglied
 Beitrag No.39, eingetragen 2019-11-14 12:47    [Diesen Beitrag zitieren]

2019-11-14 12:27 - pzktupel in Beitrag No. 38 schreibt:
N=1431655765 Dual:01010101010101010101010101010101

Ja, Du denkst hier über zahlentheoretische Belange nach...
Viel wichtiger sind doch typographische Feinheiten, oder etwa nicht?  😄

Was muss denn da rauskommen?
Ich teste z.B.
Sage
U = 1025371 # den Algorithmus durchlaufende Zahl
erfolgreich, in dem Sinne, dass etwas ausgegeben wird (nach wie vor teil-beschissen).

Für
Sage
U = 1431655765 # den Algorithmus durchlaufende Zahl
gibt er mir
1431655765, 1
Out[]

Aber das weiß ich doch nicht, ob das das Gewünschte ist.

Edit:
Evtl. schon, weil wenn ich eine 1 ergänze
Sage
U = 14316557651 # den Algorithmus durchlaufende Zahl
liefert er wieder einen Haufen tolle Zahlen.



pzktupel
Aktiv
Dabei seit: 02.09.2017
Mitteilungen: 1161
Herkunft: Thüringen
 Beitrag No.38, eingetragen 2019-11-14 12:27    [Diesen Beitrag zitieren]

Randbemerkung:
Die in Beitrag 1 aufgeführten Bedingungen sind NICHT ausreichend !
D.h. , es lassen sich nicht korrekt die Folgemitglieder berechnen...somit ist eigentlich mein Programm fehlerhaft.

Als Gegenbeispiel führe ich die Zahl 7689557 auf,warum wohl ?

Die Zahl von blind, liefert dies auch

N=1431655765 Dual:01010101010101010101010101010101

...und damit komme ich wieder auf die 101-Geschichte aus Beitrag No.4. Betrachtet man die Kette von rechts 101010....gibt diese Aufschluß über die maximale 2er Potenz als Teiler beim nächsten Glied an. Hier 32 , also 2^32 ist dann Teiler 3N+1
 


Ehemaliges_Mitglied
 Beitrag No.37, eingetragen 2019-11-14 12:23    [Diesen Beitrag zitieren]

Ja, was weiß ich...
Sage
U = 155 # den Algorithmus durchlaufende Zahl
def collatz(u):        # u = ungerade natürliche Zahl
    r,p=1,2            # Startwerte
    while 1:           # Endlosschleife
        r=(-r)%6       # r ist abwechselnd 1 oder 5
        a=(p*r-1)//3   # die "mystischen Zahlen" 3,1,13,5,53,21,213,...
        p*=2           # nächste Zweierpotenz
        if (u-a)%p==0: # wenn Rest(u-a,p)=0
            return 6*((u-a)//p)+r  # Abbruch und Rückgabe der nächsten
                                   # ungeraden Collatz-Zahl
#print collatz(U) # vom Algorithmus hervorgebrachte Zahl
def f(u):
    c=str(u)
    while u>1:
        u=collatz(u)
        c+=', '+str(u)
    print(c)
    with open('yyycollatz_{}.txt'.format(U), 'w') as fp:
        #fp.write(c) # alt
        fp.writelines(str(c) + '\n') # neu: juckt ihn einen Scheiß
        return f(c)
print f(U) # gesuchte Zahlenfolge
155, 233, 175, 263, 395, 593, 445, 167, 251, 
377, 283, 425, 319, 479, 719, 1079, 1619, 
2429, 911, 1367, 2051, 3077, 577, 433, 
325, 61, 23, 35, 53, 5, 1
 
+ 12 FEHLERMELDUNGEN.
Ich hatte es kurz ohne Fehlermeldungen. 
Ich suche jetzt da nicht zwei Stunden rum, 
wo da die Leerstelle fehlt. 
Out[]
Zur Sicherheit noch ein 5. Mal: bei cocalc.com in ein neues Sageworksheet reinkopieren, starten.



Der eigentliche Mist ist, was er nicht macht:
· Ausgabe als txt-Datei ---> zeilengetrennt (wie es bereits der Default macht, nichts Besonderes)
· Ausgabe im Display ---> unnötig zwecks Weiterverabeitung, aber anschaulich und dazu ggf. besser kommagetrennt, weil sonst die Konsole mitunter schwubs mit hunderten Zeilen macht.

------------> Warum ist das so schwer nachzuvollziehen? Warum muss man das ständig erklären? Warum muss man das ständig diskutieren?
Das ist doch völlig naheliegend und einfach nur gesunder Menschenverstand.

Ja, aber ist doch furzegal, ist doch sowieso alles furzegal. Wer will den qualitativ arbeiten?
Also bitte rechnet damit in in irgendwelchen Collatzzahlen rum und schiebts euch sonst wo hin. Scheiß Technik!







blindmessenger
Aktiv
Dabei seit: 02.08.2016
Mitteilungen: 997
Herkunft: Sachsen
 Beitrag No.36, eingetragen 2019-11-13 22:53    [Diesen Beitrag zitieren]

2019-11-13 22:28 - geroyx in Beitrag No. 34 schreibt:
2019-11-13 21:58 - blindmessenger in Beitrag No. 33 schreibt:
Der Unterschied zwischen der Version von mir bzw. pzktupel und der von querin ist, dass querin sein Code vollständig ist... Glaube ich...

Das verstehe ich nicht wie Du das meinst.
Wenn ich den letzten querin-Code bei cocalc.com in ein Neues Sageworksheet reinkopiere, bekomme ich keine Ausgabe.
Und ich weiß halt gerade nicht, ob dass schaffe, diese (natürlich trivialen) Steine zeitnah aus dem Weg zu räumen.
Also wollen wir hoffen, dass uns der liebe querin liebenswerterweise nötige Ergänzungen schenkt.
Weil sonst wirst Du -wie ich Dich (gut) kenne- das als tollen Einwurf hinnehmen und ansonsten bei Deinem Excel-Wahnsinn bleiben.


Innerhalb des Algorithmus wird mit Hilfe einer Subsequenz getestet...

Ich habe  die ersten paar Werte dieser Subsequenz (1,13,5,53,21,213,...) einfach direkt in den Algorithmus eingebunden.

Querin hat aber für diese Subsequenz gleich die Bildungsvorschrift mit eingebracht... Somit ist sein Code vollständig...

Und meiner nur Nährungsweise...

Vermute ich... Kann ich leider auch nicht überprüfen, weil ich mit python leider auch nicht umgehen kann...


blindmessenger
Aktiv
Dabei seit: 02.08.2016
Mitteilungen: 997
Herkunft: Sachsen
 Beitrag No.35, eingetragen 2019-11-13 22:47    [Diesen Beitrag zitieren]

Für Freunde der Dualzahldarstellung... ;-)

\[ \begin{array}{|c|c|}
Dezimal& Dual \\ \hline
0&0\\ \hline
3&11\\\hline
1&1\\\hline
13&1101\\\hline
5&101\\\hline
53&110101\\\hline
21&10101\\\hline
213&11010101\\\hline
85&1010101\\\hline
853&1101010101\\\hline
341&101010101\\ \hline
3413&110101010101\\\hline
1365&10101010101\\\hline
13653&11010101010101\\\hline
5461&1010101010101\\\hline
54613&1101010101010101\\\hline
21845&101010101010101\\\hline
218453&110101010101010101\\\hline
87381&10101010101010101\\\hline
873813&11010101010101010101\\\hline
\end{array} \]
[Die Antwort wurde nach Beitrag No.33 begonnen.]


Ehemaliges_Mitglied
 Beitrag No.34, eingetragen 2019-11-13 22:28    [Diesen Beitrag zitieren]

2019-11-13 21:58 - blindmessenger in Beitrag No. 33 schreibt:
Der Unterschied zwischen der Version von mir bzw. pzktupel und der von querin ist, dass querin sein Code vollständig ist... Glaube ich...

Das verstehe ich nicht wie Du das meinst.
Wenn ich den letzten querin-Code bei cocalc.com in ein Neues Sageworksheet reinkopiere, bekomme ich keine Ausgabe.
Und ich weiß halt gerade nicht, ob dass schaffe, diese (natürlich trivialen) Steine zeitnah aus dem Weg zu räumen.
Also wollen wir hoffen, dass uns der liebe querin liebenswerterweise nötige Ergänzungen schenkt.
Weil sonst wirst Du -wie ich Dich (gut) kenne- das als tollen Einwurf hinnehmen und ansonsten bei Deinem Excel-Wahnsinn bleiben.


blindmessenger
Aktiv
Dabei seit: 02.08.2016
Mitteilungen: 997
Herkunft: Sachsen
 Beitrag No.33, eingetragen 2019-11-13 21:58    [Diesen Beitrag zitieren]

2019-11-12 21:51 - querin in Beitrag No. 21 schreibt:
Hallo blindmessenger,

in python sieht dein Algorithmus so aus:
python
def collatz(u):        # u = ungerade natürliche Zahl
    r,p=1,2            # Startwerte
    while 1:           # Endlosschleife
        r=(-r)%6       # r ist abwechselnd 1 oder 5
        a=(p*r-1)//3   # die "mystischen Zahlen" 3,1,13,5,53,21,213,...
        p*=2           # nächste Zweierpotenz
        if (u-a)%p==0: # wenn Rest(u-a,p)=0
            return 6*((u-a)//p)+r  # Abbruch und Rückgabe der nächsten
                                   # ungeraden Collatz-Zahl


Der Unterschied zwischen der Version von mir bzw. pzktupel und der von querin ist, dass querin sein Code vollständig ist... Glaube ich...

Es gibt nämlich bestimmte Zahlen bei denen mein Code bzw. pzktupels Code falsche Ergebnisse liefert während querins Code funktionieren sollte...

Probiert mal die Zahl  1431655765 aus.

Laut Collatzbildungsvorschrift sollte diese Folge nur eine ungerade Zahl haben nämlich die 1.

Der Code von mir ist aber nur näherungsweise und liefert falsche Ergebnisse während querins Code das Bildungsgestz für die Subsequenz 1,13,5,53,21,... eingearbeitet hat daher vermutlich richtige Ergebnisse liefert...
Könntest Du das einmal überprüfen Querin?


Ehemaliges_Mitglied
 Beitrag No.32, eingetragen 2019-11-13 21:51    [Diesen Beitrag zitieren]

2019-11-13 21:29 - querin in Beitrag No. 31 schreibt:
Lieber geroyx, du könntest "das retten", indem du die Funktion aufrufst ;)
python
f(155)


Um ehrlich zu sein -auf die Schnelle- nicht.
Ich kann auch nicht versprechen, dass ich mich da morgen 2h drannsetzen werde, um irgendwelchen Teilaspekte hinzubekommen.  😄
(Also als kleiner Warnhinweis, falls das zu einer pädagogischen Aufgabe werden sollte.)

Ich finde sowieso, dass ich, dafür dass mich das mich das 'Thema' wenig interssiert, relativ überengagiert bin.  😄
Ich dachte nur, dass kann nicht angehen, dass da (wieder und wieder) solche Excel-Monstren kommen. Weil es intuitiv klar ist, das dass mit Sage wenige Zeilen einnimmt.

Ich kann höchstens, wenn der Code mal steht, das schön veranschaulichen - da habe ich schon ein paar Ideen. Das kann ich aus dem Stand, da muss ich nicht erst ewig an einzelnen Zeilen recherchieren.


querin
Aktiv
Dabei seit: 12.01.2018
Mitteilungen: 295
Herkunft:
 Beitrag No.31, eingetragen 2019-11-13 21:29    [Diesen Beitrag zitieren]

Lieber geroyx, du könntest "das retten", indem du die Funktion aufrufst ;)
python
f(155)


Ehemaliges_Mitglied
 Beitrag No.30, eingetragen 2019-11-13 21:09    [Diesen Beitrag zitieren]

2019-11-13 20:39 - querin in Beitrag No. 29 schreibt:
Hallo geroyx,

collatz(u) ist meine Antwort auf blindmessengers Frage aus dem Startbeitrag für beliebig(!) große ungerade Zahlen u.

Die Testfunktion
python
def f(u):
    c=str(u)
    while u>1:
        u=collatz(u)
        c+=', '+str(u)
    print(c)
    with open('collatz_{}.txt'.format(u), 'w') as fp:
        fp.write(c)

druckt und speichert alle ungeraden Zahlen der Collatzfolge vom Startwert u bis zur abschließenden 1. Zum Beispiel liefert f(155) die Ausgabe

155, 233, 175, 263, 395, 593, 445, 167, 251, 377, 283, 425, 319, 479, 719, 1079, 1619, 2429, 911, 1367, 2051, 3077, 577, 433, 325, 61, 23, 35, 53, 5, 1


Na da simmer doch einen großen Schritt weiter - wollte ich gerade sagen.

Jetzt ist es nur so, das der Code oben bei mir erstmal gar nichts ausgibt.  😵

Bei LaTeX gibt es die schöne Regel, dass man Minimalbeispiele immer vollständig und lauffähig angibt. Bei allem anderen werden grundsätzlich solche Code-Fragmente, -Ausschnitte oder -Futzel angegeben.

Versteh es nicht falsch, aber ich z.B. habe gut 1,5 Std. gebraucht, um alleine diese print-Ausgabe in der gewünschten Form hinzubekommen.

Also sei doch so nett und gib den Code so an, dass er im Display etwas ausgibt und eine txt-Datei schreibt.
Hier ist mir es noch ungefähr klar, wie man das retten könnte. Aber es ist Dein Code und es soll auch Dir gebühren.  😉
(Und, wenn ich ehrlich bin, interessiert mich das Thema eigentlich nur im Sage-einarbeitenden Sinne...)


querin
Aktiv
Dabei seit: 12.01.2018
Mitteilungen: 295
Herkunft:
 Beitrag No.29, eingetragen 2019-11-13 20:39    [Diesen Beitrag zitieren]

Hallo geroyx,

collatz(u) ist meine Antwort auf blindmessengers Frage aus dem Startbeitrag für beliebig(!) große ungerade Zahlen u.

Die Testfunktion
python
def f(u):
    c=str(u)
    while u>1:
        u=collatz(u)
        c+=', '+str(u)
    print(c)
    with open('collatz_{}.txt'.format(u), 'w') as fp:
        fp.write(c)

druckt und speichert alle ungeraden Zahlen der Collatzfolge vom Startwert u bis zur abschließenden 1. Zum Beispiel liefert f(155) die Ausgabe

155, 233, 175, 263, 395, 593, 445, 167, 251, 377, 283, 425, 319, 479, 719, 1079, 1619, 2429, 911, 1367, 2051, 3077, 577, 433, 325, 61, 23, 35, 53, 5, 1


pzktupel
Aktiv
Dabei seit: 02.09.2017
Mitteilungen: 1161
Herkunft: Thüringen
 Beitrag No.28, eingetragen 2019-11-13 18:10    [Diesen Beitrag zitieren]

Liegst mit den Vermutungen richtig !
Es ist eine Umsetzung der Bedingungen , um sehr große Zahlen durchzutesten ( bis 256 Stellen erstmal )


Ehemaliges_Mitglied
 Beitrag No.27, eingetragen 2019-11-13 17:52    [Diesen Beitrag zitieren]

2019-11-13 17:34 - pzktupel in Beitrag No. 26 schreibt:
Hier mein Basic-Code, der Zahlen mit Überlänge erlaubt.
Für 64bit Zahlen, wäre er weit kürzer, aber so musste ich alles neu
entwerfen. Anbei, ein BigInt liegt nicht vor, oder ich bin zu doof dazu.

DIM AS UINTEGER N0,SU,ii,D,SS,S,NXX
DIM AS INTEGER T1,L,k,p
DIM AS UBYTE i,ad,j,UB
....


Eieiei... Ok. Vielleicht bin ich ja völlig neben der Kappe, in dem Fall habe ich nichts gesagt.

Für mich sieht das so aus, als habest Du blindmessengers Excel mit Basic umgesetzt, ggf. inhaltlich 1:1? Und das ermöglicht Dir dann die Excel-Grenzen zu verlassen und auch größere Zahlen als Eingangsparameter zu wählen. Das ist ja schon eine Leistung!

Falls dem so ist, vermute ich bzw. bin ich zuversichtlich:
Wenn der Algorithmus in allgemeiner, sprachneutraler Form vorliegt, dann bin ich zuversichtlich, dass er sich in wenigen Zeilen bzw. einfach umsetzen lässt.

Und allgemeine Beschreibungen von Algorithmen gibt man möglichst als Flussdiagramm oder auch Pseudocode an; das hat sich nunmal so bewährt.

Wie gesagt, alles sehr spekulativ. Vielleicht zieht ja querin noch sein Ass aus dem Ärmel.


pzktupel
Aktiv
Dabei seit: 02.09.2017
Mitteilungen: 1161
Herkunft: Thüringen
 Beitrag No.26, eingetragen 2019-11-13 17:34    [Diesen Beitrag zitieren]

Hier mein Basic-Code, der Zahlen mit Überlänge erlaubt.
Für 64bit Zahlen, wäre er weit kürzer, aber so musste ich alles neu
entwerfen. Anbei, ein BigInt liegt nicht vor, oder ich bin zu doof dazu.

DIM AS UINTEGER N0,SU,ii,D,SS,S,NXX
DIM AS INTEGER T1,L,k,p
DIM AS UBYTE i,ad,j,UB
DIM AS STRING N,N6,Nx,DU,NDU,NDD
 
OPEN "Collatz.txt" FOR OUTPUT AS #1
INPUT "N=";N 
PRINT #1,"N=";N;" ";
 
REM Duale Zerlegung
 
NDU=N:DU=""
NDD=""
 
UB=0
WHILE VAL(NDU)<>1
FOR p=1 TO LEN(NDU)
N0=UB*10+VAL(MID(NDU,p,1))
UB=N0 MOD 2 
NDD=NDD+STR(N0\2)
NEXT p
DU=STR(UB)+DU
NDU=NDD
NDD=""
UB=0
WEND
DU="1"+DU
 
PRINT #1,DU
 
BEGIN:
 
SU=349525:i=21
 
N0=0
FOR j=1 TO LEN(N)
N0=(N0*10+VAL(MID(N,j,1))) MOD 2^21
NEXT j
IF N0=349525 THEN GOTO WEITER
 
N0=0
SU=873813:i=20
FOR j=1 TO LEN(N)
N0=(N0*10+VAL(MID(N,j,1))) MOD 2^20
NEXT j
IF N0=873813 THEN GOTO WEITER
 
SU=87381:i=19:N0=VAL(RIGHT(N,19)) MOD 2^19:IF N0=87381 THEN GOTO WEITER
SU=218453:i=18:N0=VAL(RIGHT(N,18)) MOD 2^18:IF N0=218453 THEN GOTO WEITER
SU=21845:i=17:N0=VAL(RIGHT(N,17)) MOD 2^17:IF N0=21845 THEN GOTO WEITER
SU=54613:i=16:N0=VAL(RIGHT(N,16)) MOD 2^16:IF N0=54613 THEN GOTO WEITER
SU=5461:i=15:N0=VAL(RIGHT(N,15)) MOD 2^15:IF N0=5461 THEN GOTO WEITER
SU=13653:i=14:N0=VAL(RIGHT(N,14)) MOD 2^14:IF N0=13653 THEN GOTO WEITER
SU=1365:i=13:N0=VAL(RIGHT(N,13)) MOD 2^13:IF N0=1365 THEN GOTO WEITER
SU=3413:i=12:N0=VAL(RIGHT(N,12)) MOD 2^12:IF N0=3413 THEN GOTO WEITER
SU=341:i=11:N0=VAL(RIGHT(N,11)) MOD 2^11:IF N0=341 THEN GOTO WEITER
SU=853:i=10:N0=VAL(RIGHT(N,10)) MOD 2^10:IF N0=853 THEN GOTO WEITER
SU=85:i=9:N0=VAL(RIGHT(N,9)) MOD 2^9:IF N0=85 THEN GOTO WEITER
SU=213:i=8:N0=VAL(RIGHT(N,8)) MOD 2^8:IF N0=213 THEN GOTO WEITER
SU=21:i=7:N0=VAL(RIGHT(N,7)) MOD 2^7:IF N0=21 THEN GOTO WEITER
SU=53:i=6:N0=VAL(RIGHT(N,6)) MOD 2^6:IF N0=53 THEN GOTO WEITER
SU=5:i=5:N0=VAL(RIGHT(N,5)) MOD 2^5:IF N0=5 THEN GOTO WEITER
SU=13:i=4:N0=VAL(RIGHT(N,4)) MOD 2^4:IF N0=13 THEN GOTO WEITER
SU=1:i=3:N0=VAL(RIGHT(N,3)) MOD 2^3:IF N0=1 THEN GOTO WEITER
SU=3:i=2:N0=VAL(RIGHT(N,2)) MOD 2^2:IF N0=3 THEN GOTO WEITER
 
WEITER:
IF i MOD 2=0 THEN ad=5 else ad=1
 
 
REM Division
 
L=LEN(N)
ii=2^i
NXX=0
Nx=""
 
FOR j=1 TO L
S=NXX*10+VAL(MID(N,j,1))
SS=S\ii:Nx=Nx+STR(SS)
NXX=S-(SS*ii)
NEXT j
 
 
REM mal 6
 
L=LEN(Nx)
UB=0
N6=""
S=VAL(MID(Nx,L,1))*6+ad
UB=S\10
S=S MOD 10
 
N6=STR(S)+N6
FOR j=1 TO L-1 
S=VAL(MID(Nx,L-j,1))*6+UB
UB=S\10
S=S MOD 10
N6=STR(S)+N6
NEXT j
 
IF UB>0 THEN N6=STR(UB)+N6
 
j=1
WHILE MID(N6,j,1)="0"
j+=1
WEND
 
N=RIGHT(N6,LEN(N6)-j+1)
PRINT #1,N;" ";
 
NDU=N:DU=""
NDD=""
 
UB=0
WHILE VAL(NDU)<>1
FOR p=1 TO LEN(NDU)
N0=UB*10+VAL(MID(NDU,p,1))
UB=N0 MOD 2 
NDD=NDD+STR(N0\2)
NEXT p
DU=STR(UB)+DU
NDU=NDD
NDD=""
UB=0
WEND
DU="1"+DU
 
PRINT #1,DU
 
 
 
 
 
IF VAL(N)=1 THEN CLOSE #1:SHELL ("notepad collatz.txt"):SLEEP:STOP
 
GOTO BEGIN


Ehemaliges_Mitglied
 Beitrag No.25, eingetragen 2019-11-13 17:25    [Diesen Beitrag zitieren]

2019-11-13 17:14 - pzktupel in Beitrag No. 24 schreibt:
Also mal langsam, was hier als Programm dargeboten wird, hat nichts mit dem zutun aus Beitrag 1.

Diese Ergebnisangabe (?) ist ja schön, aber nützt mir leider soviel wie Excel aus #0. Könntest Du also zu dem Algorithmus ein Flussdiagramm oder Pseudocode oder ähnliches angeben?
Oder ist der Algorithmus für die Collatzer völlig trivial und offensichtlich? Kann ich, wie gesagt, nicht wissen.
Ich weiß übrigens, aus genannten Gründen, nicht, ob der Code von querin bzw. meine ergänzte Ausgabe dazu das Gesuchte/Richtige ist, das habe ich jetzt einfach mal angenommen.


pzktupel
Aktiv
Dabei seit: 02.09.2017
Mitteilungen: 1161
Herkunft: Thüringen
 Beitrag No.24, eingetragen 2019-11-13 17:14    [Diesen Beitrag zitieren]

Also mal langsam, was hier als Programm dargeboten wird, hat nichts mit dem zutun aus Beitrag 1.

Es ist überhaupt nichts abwechselnd mit +1 oder +5.
Es ist immer eine Bedingungen, die aus der Vielzahl von oben passt.
Die passende Bedingung entsteht erst, wenn das Folgeglied berechnet wurde.

Die Regeln angewandt, ergeben die ungeraden Collatzglieder zu einer Startzahl...die geraden Glieder werden dadurch ausgegrenzt.

Bsp N=155 mit dualer Darstellung, aus dem von mir abgeleiteten Programm
N=155 10011011
233 11101001
175 10101111
263 100000111
395 110001011
593 1001010001
445 110111101
167 10100111
251 11111011
377 101111001
283 100011011
425 110101001
319 100111111
479 111011111
719 1011001111
1079 10000110111
1619 11001010011
2429 100101111101
911 1110001111
1367 10101010111
2051 100000000011
3077 110000000101
577 1001000001
433 110110001
325 101000101
61 111101
23 10111
35 100011
53 110101
5 101
1 1


Ehemaliges_Mitglied
 Beitrag No.23, eingetragen 2019-11-13 16:53    [Diesen Beitrag zitieren]

2019-11-12 22:31 - geroyx in Beitrag No. 22 schreibt:
 Könntest Du bitte entsprechende Ausgabe-Befehle ergänzen?

Da vom lieben querin (noch?) nichts kam, versuche ich mich mal an dieser kleinen Ergänzung:
Sage
U = 17 # den Algorithmus durchlaufende Zahl
def collatz(u):        # u = ungerade natürliche Zahl
    r,p=1,2            # Startwerte
    while 1:           # Endlosschleife
        r=(-r)%6       # r ist abwechselnd 1 oder 5
        a=(p*r-1)//3   # die "mystischen Zahlen" 3,1,13,5,53,21,213,...
        p*=2           # nächste Zweierpotenz
        if (u-a)%p==0: # wenn Rest(u-a,p)=0
            return 6*((u-a)//p)+r  # Abbruch und Rückgabe der nächsten
                                   # ungeraden Collatz-Zahl
print collatz(U) # vom Algorithmus hervorgebrachte Zahl
13
Out[]


Ob das jetzt das gesuchte bzw. richtige Ergebnis ist, vermag ich nicht zu sagen; dazu bin ich zu wenig in das Collatz-Problem eingearbeitet.


Ehemaliges_Mitglied
 Beitrag No.22, eingetragen 2019-11-12 22:31    [Diesen Beitrag zitieren]

2019-11-12 21:51 - querin in Beitrag No. 21 schreibt:
Hallo blindmessenger,

in python sieht dein Algorithmus so aus:
python
def collatz(u):        # u = ungerade natürliche Zahl
    r,p=1,2            # Startwerte
    while 1:           # Endlosschleife
        r=(-r)%6       # r ist abwechselnd 1 oder 5
        a=(p*r-1)//3   # die "mystischen Zahlen" 3,1,13,5,53,21,213,...
        p*=2           # nächste Zweierpotenz
        if (u-a)%p==0: # wenn Rest(u-a,p)=0
            return 6*((u-a)//p)+r  # Abbruch und Rückgabe der nächsten
                                   # ungeraden Collatz-Zahl


Ja interessant, wenn sich das Excel-Monstrum darauf reduzieren lässt, ist ja schonmal viel gewonnen.

Jedoch: Könntest Du bitte entsprechende Ausgabe-Befehle ergänzen?
Ähnlich Beitrag No.18?
--> Ich bin ja da päpstlicher als der Papst: Im brauche das immer einmal im Display; und einmal als Exporttextdatei, mit Hinblick auf evtuelle Weiterverarbeitung (Graph o.ä.).

PS: Für die Laien: Python/Sage-Codes können ohne Weiteres auf  cocalc.com/ getestet werden. Dort einfach ein neues Sage-Worksheet.


querin
Aktiv
Dabei seit: 12.01.2018
Mitteilungen: 295
Herkunft:
 Beitrag No.21, eingetragen 2019-11-12 21:51    [Diesen Beitrag zitieren]

Hallo blindmessenger,

in python sieht dein Algorithmus so aus:
python
def collatz(u):        # u = ungerade natürliche Zahl
    r,p=1,2            # Startwerte
    while 1:           # Endlosschleife
        r=(-r)%6       # r ist abwechselnd 1 oder 5
        a=(p*r-1)//3   # die "mystischen Zahlen" 3,1,13,5,53,21,213,...
        p*=2           # nächste Zweierpotenz
        if (u-a)%p==0: # wenn Rest(u-a,p)=0
            return 6*((u-a)//p)+r  # Abbruch und Rückgabe der nächsten
                                   # ungeraden Collatz-Zahl


Ehemaliges_Mitglied
 Beitrag No.20, eingetragen 2019-11-12 18:26    [Diesen Beitrag zitieren]

2019-11-12 17:53 - blindmessenger in Beitrag No. 19 schreibt:
1. Das wäre die klassische Collatz Bildungsvorschrift...

2. Bei der mir erdachten Bildungsvorschrift kommen auch die Collatzfolgen heraus allerdings über einen völlig anderen Weg...

1. Das ist richtig und als professionellere Umsetzung von Beitrag No. 12  zu verstehen.

2. Ja, und da sind wir gespannt Deine CAS-Umsetzung von Beitrag No. 0 zu sehen; ich sehe da ifthenelse und Modulo-Rechnungen; das ist funktionell alles in Beitrag No. 18 bzw. 12 enthalten.  


blindmessenger
Aktiv
Dabei seit: 02.08.2016
Mitteilungen: 997
Herkunft: Sachsen
 Beitrag No.19, eingetragen 2019-11-12 17:53    [Diesen Beitrag zitieren]

Hallo Geroyx,

Danke für Deine Tipps... Das wäre die klassische Collatz Bildungsvorschrift...

Bei der mir erdachten Bildungsvorschrift kommen auch die Collatzfolgen heraus allerdings über einen völlig anderen Weg...

Es werden bestimmte Restklassen abgefragt und wenn eine Restklasse passt wird eine bestimmte Multiplikation durchgeführt. So entsteht das nächste Collatzelement... Und dann wieder von vorne: Restklasse finden und multiplizieren...


Ehemaliges_Mitglied
 Beitrag No.18, eingetragen 2019-11-12 15:41    [Diesen Beitrag zitieren]

2019-11-08 19:48 - geroyx in Beitrag No. 12 schreibt:
Alt:
Das hier liefert jedenfalls schonmal diese Co'tz-Folge:
Sage
x = 19 # Startnummer
N=33  # Laufweite
for k in range (0,N):
    if x % 2 ==0:
        x=x/2
    else: 
        x=3*x+1
    print x
x=x+k
In[]
58,   29,   88,   44,   22,   11,   34,   17,   52,   26,   13,   40, 
20,   10,   5,   16,   8,   4,   2,   1,   4,   2,   1,   4,   2,   1,
4,   2,   1,   4,   2,   1,   4,   ......
Out[]

Darauf aufbauend kann man sicher Weiteres ersinnen...



Neu:
Mit Hilfe der Experten:
Sage
X = 19      # Startwert
N = 5      # Laufweite
def f(x, n):
    yield x
    for k in range(0, n):
        if x % 2 == 0:
            x = x / 2
        else:
            x = 3*x + 1
        yield x
print(", ".join(map(str, f(X, N)))) # kommagetrennte Display-Ausgabe
#print("\n".join(map(str, f(X, N)))) # zeilengetrennte Display-Ausgabe
with open('collatz_{}_{}.txt'.format(X, N), 'w') as file: # Ausgabe als
        file.writelines(str(z) + '\n' for z in f(X, N)) # collatz_19_5.txt
19, 58, 29, 88, 44, 22
Out[] Display
19
58
29
88
44
22
Out[] collatz_19_5.txt

Das einfache Minimalbeispiel könnte vll. der Einstieg in das Sage-CAS sein.
Die letzten 4 Zeilen dienen der Ausgabe des Ergebnisses und sind eher tieferes Python-Wissen; sie sollten sich aber produktiv auf andere Rechnungen anwenden lassen.

In allen Fällen sollte man für komplexere Programme kein umfangreiches Excel-Snippet angeben, sondern ein Ablauf- bzw. Flussdiagramm.



LukasNiessen
Aktiv
Dabei seit: 30.09.2019
Mitteilungen: 74
Herkunft: Rheinland-Pfalz, Asbach
 Beitrag No.17, eingetragen 2019-11-08 22:47    [Diesen Beitrag zitieren]

2019-11-07 23:08 - haegar90 in Beitrag No. 3 schreibt:
Wieso muss es Java sein ?
Ich spreche von Biginteger, und C, VB, bieten das auch.

Muss es nicht, die anderen Sprachen kann ich nicht. Ich wollte sagen, dass er Java nehmen kann und dabei BigInteger nutzen sollte.


haegar90
Aktiv
Dabei seit: 18.03.2019
Mitteilungen: 212
Herkunft: Danewerk
 Beitrag No.16, eingetragen 2019-11-08 22:23    [Diesen Beitrag zitieren]

..da eure Gedanken in einer ähnlichen (mir nicht direkt schlüssig - was ist der Gewinn daraus genau ?) Richtung angesiedelt sind, möchte ich dennoch gerne etwas dazu beitragen.  😄

Habe dieses mal vor langer Zeit betrachtet und auch schlüssig geprüft.
Vielleicht könnt ihr das bei euren weiteren Überlegungen verwenden.
Gucke mal ob ich meine Formulierungen dazu noch finde. Wenn nicht, erklären sich diese Zahlen ja mit etwas Überlegung eigentlich von selbst.
...mit deinen gewählten Zahlen
n       3n+1(3n+1)/2^L	L		m=n-2^x	c=3m+1	c/2^y	y
277	832	13	6		21	64	1	6
277	832	13	6		149	448	7	6
277	832	13	6		213	640	5	7
277	832	13	6		245	736	23	5
277	832	13	6		261	784	49	4
277	832	13	6		269	808	101	3
277	832	13	6		273	820	205	2
277	832	13	6		275	826	413	1
 
451	1354	677	1		195	586	293	1
451	1354	677	1		323	970	485	1
451	1354	677	1		387	1162	581	1
451	1354	677	1		419	1258	629	1
451	1354	677	1		435	1306	653	1
451	1354	677	1		443	1330	665	1
451	1354	677	1		447	1342	671	1
451	1354	677	1		449	1348	337	2
 


Wenn man das Collatz-Problem betrachtet, sich damit beschäftigt, so ist es das Karotten-Prinzip was einem widerfährt.  😁  ...weitermachen, es macht ja irgendwie auch Spaß.


Ehemaliges_Mitglied
 Beitrag No.15, eingetragen 2019-11-08 21:37    [Diesen Beitrag zitieren]

2019-11-08 21:19 - blindmessenger in Beitrag No. 13 schreibt:
Hallo Geroyx,

1. danke für Deine Tipps...

2. Das Programm von PZKTupel funktioniert schon ganz gut...

Und es lassen sich so wirklich alle ungeraden Collatzelemente erzeugen und das nur mit Restklassen ohne den eigentlichen Collatzalgorithmus zu gebrauchen...

1. Bitte.
Ich war noch in dieser Debatte, ob Java, ob C+ usw. steckengeblieben.

2. Ja, springen auch sämtliche Virenscanner und Firewalls an, wenn man es runterlädt und startet.  😁
Aber, wenn es vom guten PKZTuber kommt...

Aber zurück zu
1. Es ging mir nicht so sehr, um dieses spezielle Problem. Das verstehe ich sowieso nicht bzw. habe ich mich nicht in "Excel-Deluxe" aus dem Startpost reingedacht; um ehrlich zu sein, war ich dazu auch nicht bereit.

Es ging um den weiteren Ausblick.

PKZTuber's exe-Datei mag hier helfen, sein Programm ist aber nicht bearbeitbar (zumindest für mich nicht); und damit auch nicht weiterentwickelbar - außer für ihn selbst natürlich.

Weil ich vermutlich nicht der Einzige bin, der so dachte, sage ich es lieber kurz und schmerzlos:
 Ein zahlentheoretisches Jahrhundertproblem mit Excel angehen - wenn ich sowas schon sehe...
Das kann auf lange Sicht zu keinem Durchbruch führen; dazu ist eine Tabellenkalkulation einfach nicht da.

Also arbeite Dich in eine geeignete Programmiersprache ein; und da empfehle ich eben ein CAS; und da empfehle ich eben Sage(math). Warum habe ich ja begründet.

 


pzktupel
Aktiv
Dabei seit: 02.09.2017
Mitteilungen: 1161
Herkunft: Thüringen
 Beitrag No.14, eingetragen 2019-11-08 21:25    [Diesen Beitrag zitieren]

Update V4

www.sendspace.com/file/u55uef

Ich habe mir die Mühe gemacht, von jedem Collatzmitglied die Duale Zerlegung mit anzuführen.

Somit lassen sich die 101010...-Kombinationen auch erkennen, die ein Indiz sind, durch welche 2er Potenz 3N+1 dann teilbar ist


blindmessenger
Aktiv
Dabei seit: 02.08.2016
Mitteilungen: 997
Herkunft: Sachsen
 Beitrag No.13, eingetragen 2019-11-08 21:19    [Diesen Beitrag zitieren]

Hallo Geroyx,

danke für Deine Tipps...

Das Programm von PZKTupel funktioniert schon ganz gut...

Und es lassen sich so wirklich alle ungeraden Collatzelemente erzeugen und das nur mit Restklassen ohne den eigentlichen Collatzalgorithmus zu gebrauchen...


Ehemaliges_Mitglied
 Beitrag No.12, eingetragen 2019-11-08 19:48    [Diesen Beitrag zitieren]

Also ich weiß auch nicht, was das Beste oder Schlechteste ist.

Wer JAVA gut kann, empfiehlt JAVA.
Wer C+ gut kann, empfiehlt C+.
...

Ich bin mir nur in einem sicher: Diese Excel-Verschachtelung im Startpost war sicher viel Arbeit; und es war die Mühe nicht wert.

2019-11-08 01:03 - blindmessenger in Beitrag No. 5 schreibt:
Meine Programmierkenntnisse sind leider sehr bescheiden...

Wenn schon in etwas Neues einarbeiten und wenn es sich um ein mathematisches oder zahlentheoretisches Problem handelt, warum nicht auch ein richtiges CAS nehmen, was dafür ausgelegt ist?

Ich weiß auch nicht, ob Sage(math) besser / schlechter ist als Mathematica / Maple / ...; ich weiß aber, dass es kostenlos und frei verfügbar ist ( cocalc.com/ ) ist, und von der Syntax her nicht schwieriger / einfacher ist als die anderen. Und ich kann auch mutmaßen: Sollte Sage -gegenüber den anderen- nicht mehr ausreichen, dann ist bereits viel verloren.

Das hier liefert jedenfalls schonmal diese Co'tz-Folge:
Sage
x = 19 # Startnummer
N=33  # Laufweite
for k in range (0,N):
    if x % 2 ==0:
        x=x/2
    else: 
        x=3*x+1
    print x
x=x+k
In[]
58,   29,   88,   44,   22,   11,   34,   17,   52,   26,   13,   40, 
20,   10,   5,   16,   8,   4,   2,   1,   4,   2,   1,   4,   2,   1,
4,   2,   1,   4,   2,   1,   4,   ......
Out[]

Darauf aufbauend kann man sicher Weiteres ersinnen...

PS: Die Einrückungen oben sind keine Zierde. Da legt er großen Wert drauf...

PPS: Die Leerstellen und die Kommas bei Out[] musste ich selbst einfügen, vielleicht kann mir ja jmd. sagen, wie man das automatisch erhält in Sage.


blindmessenger
Aktiv
Dabei seit: 02.08.2016
Mitteilungen: 997
Herkunft: Sachsen
 Beitrag No.11, eingetragen 2019-11-08 15:50    [Diesen Beitrag zitieren]

passt schon  😉


pzktupel
Aktiv
Dabei seit: 02.09.2017
Mitteilungen: 1161
Herkunft: Thüringen
 Beitrag No.10, eingetragen 2019-11-08 15:40    [Diesen Beitrag zitieren]

Hoffe der macht das auch richtig bei den riesen Zahlen


Merk gerade, mal nicht über 256 Stellen mit der Version


blindmessenger
Aktiv
Dabei seit: 02.08.2016
Mitteilungen: 997
Herkunft: Sachsen
 Beitrag No.9, eingetragen 2019-11-08 15:31    [Diesen Beitrag zitieren]

Danke Dir pzktupel...


pzktupel
Aktiv
Dabei seit: 02.09.2017
Mitteilungen: 1161
Herkunft: Thüringen
 Beitrag No.8, eingetragen 2019-11-08 12:03    [Diesen Beitrag zitieren]

Okay blind...

Hab was programmiert , Stellenanzahl offen

Läuft alles über Zeichenketten.

Version 3, mit Speicherung der Zahlenentwicklung und Streichung führender Nullen

www.sendspace.com/file/15vz53


pzktupel
Aktiv
Dabei seit: 02.09.2017
Mitteilungen: 1161
Herkunft: Thüringen
 Beitrag No.7, eingetragen 2019-11-08 10:13    [Diesen Beitrag zitieren]

@blind

Ich könnte das über große Strings realisieren.

Da hier 2er Potenzen als MOD genommen werden, kann man die Sache teilweise vereinfachen.

Würde man von N=8716847617824687126476128746187641781 den Rest für 2048 bestimmen, reicht aus: 46187641781 MOD 2048 = 949


pzktupel
Aktiv
Dabei seit: 02.09.2017
Mitteilungen: 1161
Herkunft: Thüringen
 Beitrag No.6, eingetragen 2019-11-08 07:32    [Diesen Beitrag zitieren]

Als wichtige Ergänzung (auch wenn im Nachhinein fast trival)...

Gegeben sei eine Zahl aus einer Collatzfolge N, so kann man die maximale 2er Potenz von 3N+1 derart bestimmen:

Bsp 1:

N=451

451/2=225 R1
225/2=112 R1:stop

11...1 Stelle  passt, 3N+1 ist durch 2^1=2 teilbar

Bsp 2:

N=277

277/2=138 R1
138/2=069 R0
069/2=034 R1
034/2=017 R0
017/2=008 R1
008/2=004 R0
004/2=002 R0:stop

Es passen 6 Stellen, somit wird 3N+1 durch 2^6=64 teilbar sein.


blindmessenger
Aktiv
Dabei seit: 02.08.2016
Mitteilungen: 997
Herkunft: Sachsen
 Beitrag No.5, eingetragen 2019-11-08 01:03    [Diesen Beitrag zitieren]

2019-11-07 22:25 - haegar90 in Beitrag No. 1 schreibt:
Dafür ist Excel ungeeignet. Aber C, Java, VB etc. bieten alle die Möglichkeit mit theoretisch unendlich großen Zahlen zu rechnen und stehen kostenlos zum download im Web bereit.

Meine Programmierkenntnisse sind leider sehr bescheiden...

Kann mir jemand den Big integer Algorithmus zeigen?


pzktupel
Aktiv
Dabei seit: 02.09.2017
Mitteilungen: 1161
Herkunft: Thüringen
 Beitrag No.4, eingetragen 2019-11-07 23:32    [Diesen Beitrag zitieren]

Da dieses Thema noch einmal aufgegriffen wurde, habe ich in den letzten paar Stunden im Kopf etwas neues herausgefunden.

Die Antwort auf die Frage, was ist die maximale 2er Potenz nach einem 3x+1 Durchgang ?

Ich beobachtete, das 2^2n-1 durch 3 teilbar ist und das die Folgeglieder davon mit 1,5,21,85,...ein Schlüssel darstellen bei der MOD-Bestimmung mit einer 2er Potenz.

Kurzum, stellt man zu einer ungeraden Zahl die duale Zerlegung her und zählt von rechts nach links eine vorhandene 101010...Kombination durch, so hat man sofort die maximale 2er Potenz als Teiler, die nach 3x+1 entsteht.


Bsp.
x=113 , Dual: 1110001: hier ist nach ..01 Schluss, sind 2 stellen, also 2^2=4

113*3+1=4*85

85 selbst hat 01010101 , macht 8 Stellen. 85*3+1=2^8

x=631628361421, Dual ....1001101 , hier ..101, also 3 Stellen ->8

3x+1 MOD 8=0, MOD 16<>0

Weist man nun nach, das die Duale Zerlegung sich verkürzt , hat man das Problem eigentlich gelöst. Ich hatte ja einen anderen Weg mal angedacht...




haegar90
Aktiv
Dabei seit: 18.03.2019
Mitteilungen: 212
Herkunft: Danewerk
 Beitrag No.3, eingetragen 2019-11-07 23:08    [Diesen Beitrag zitieren]

Wieso muss es Java sein ?
Ich spreche von Biginteger, und C, VB, bieten das auch.


LukasNiessen
Aktiv
Dabei seit: 30.09.2019
Mitteilungen: 74
Herkunft: Rheinland-Pfalz, Asbach
 Beitrag No.2, eingetragen 2019-11-07 22:58    [Diesen Beitrag zitieren]

Java:
BigInteger

(Primitiver Integer klappt wegen Überlauf nicht)


haegar90
Aktiv
Dabei seit: 18.03.2019
Mitteilungen: 212
Herkunft: Danewerk
 Beitrag No.1, eingetragen 2019-11-07 22:25    [Diesen Beitrag zitieren]

Dafür ist Excel ungeeignet. Aber C, Java, VB etc. bieten alle die Möglichkeit mit theoretisch unendlich großen Zahlen zu rechnen und stehen kostenlos zum download im Web bereit.


blindmessenger
Aktiv
Dabei seit: 02.08.2016
Mitteilungen: 997
Herkunft: Sachsen
 Themenstart: 2019-11-07 19:44    [Diesen Beitrag zitieren]

Hallo,

ich würde gerne diese Berechnung/Algorithmus aus Excel:


=WENN(REST(C4-3;4)=0;((C4-3)/4)*6+5;WENN(REST(C4-1;8)=0;((C4-1)/8)*6+1;WENN(REST(C4-13;16)=0;((C4-13)/16)*6+5;WENN(REST(C4-5;32)=0;((C4-5)/32)*6+1;WENN(REST(C4-53;64)=0;((C4-53)/64)*6+5;WENN(REST(C4-21;128)=0;((C4-21)/128)*6+1;WENN(REST(C4-213;256)=0;((C4-213)/256)*6+5;WENN(REST(C4-85;512)=0;((C4-85)/512)*6+1;WENN(REST(C4-853;1024)=0;((C4-853)/1024)*6+5;WENN(REST(C4-341;2048)=0;((C4-341)/2048)*6+1;WENN(REST(C4-3413;4096)=0;((C4-3413)/4096)*6+5;WENN(REST(C4-1365;8192)=0;((C4-1365)/8192)*6+1;WENN(REST(C4-13653;16384)=0;((C4-13653)/16384)*6+5;WENN(REST(C4-5461;32768)=0;((C4-5461)/32768)*6+1;WENN(REST(C4-54613;65536)=0;((C4-54613)/65536)*6+5;WENN(REST(C4-21845;131072)=0;((C4-21845)/131072)*6+1;WENN(REST(C4-218453;262144)=0;((C4-218453)/262144)*6+5;WENN(REST(C4-87381;524288)=0;((C4-87381)/524288)*6+1;WENN(REST(C4-873813;1048576)=0;((C4-873813)/1048576)*6+5;WENN(REST(C4-349525;2097152)=0;((C4-349525)/2097152)*6+1;""))))))))))))))))))))


auch für sehr große Zahlen durchführen.

Hat jemand eine Idee dazu?  


 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2019 by Matroids Matheplanet
This web site was made with PHP-Nuke, a web portal system written in PHP. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]