Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Collatz Schleife » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Seiten (3): [1] 2 3 nächste » Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Collatz Schleife
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
blindmessenger
Mitglied


Dabei seit: 09.04.2016
Beiträge: 37

Collatz Schleife Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Meine Frage:
Hallo,
im Internet habe ich einen Code aufgeschnappt womit man Collatz reihen generieren kann. Ich interessiere mich mathematisch für das Collatz Problem und würde den Code gerne modifizieren. Leider habe ich von Informatik keine Ahnung. Brauche den Code also nur als Mittel zum Zweck... Vielleicht kann mir jemand helfen...

Der Code generiert mit VBA Excel für die Zahlen 1-100 (die in der ersten Zeile einer Excel Tabelle aufgereiht sind) die Bildungsvorschrift bei geraden Zahlen durch 2 und bei ungeraden Zahlen 3n+1 bis man bei 1 angelangt ist. Wenn ich den Code mit 5n+1 durchrechnen lasse taucht interessanterweise mehr als eine Schleife auf.

Ich brauche den Code also so dass er nicht bei 1 abbricht sondern genau dann wenn eine Zahl doppelt auftaucht. So dass man sofort sieht wenn eine Schleife auftacht. Beispiel für 5n+1

1,6,3,16,8,4,2,1
2,1,6,3,16,8,4,2,1
3,16,8,4,2,1,6,3,16,8,4,2,1
4,2,1,6,3,16,8,4,2,1
5,26,13,66,33,166,83,416,208,104,52,26


Hier gibt es also für die Zahlen 1-4 die Schleife mit der Zahl 1. Bei der 5. Zahl kommt nun eine neue Schleife mit der Zahl 26. Da mein Code ja nun immer bis 1 rechnen muss kommt es dann in diser 5. Spalte zu einer Dauerschleife... Er soll aber genau dann abbrechen wenn die Zahl in der Spalte das zweite Mal auftaucht.

Weiß jemand was ich da schreiben muss?




Meine Ideen:
Sub eintragen()
Dim maxSpalten As Integer, Zeile As Integer
Dim fertig As Boolean
maxSpalten = 100
Rows("1:65536").ClearContents
For Spalte = 1 To maxSpalten 'erste Zeile eintragen
fertig = False
Zeile = 1
Cells(1, Spalte).Value = Spalte
Do Until fertig = True
Cells(Zeile + 1, Spalte).Value = Collatz(Cells(Zeile, Spalte).Value)
If Collatz(Cells(Zeile, Spalte).Value) = 1 And Zeile >= 2 Then
fertig = True
End If
Zeile = Zeile + 1
Loop
Next
End Sub

Function Collatz(zahl As Integer) As Integer
If zahl Mod 2 = 0 Then 'zahl ist gerade
Collatz = zahl / 2
Else 'zahl ist ungerade
Collatz = 5 * zahl + 1
End If
End Function
09.04.2016 16:24 blindmessenger ist offline Beiträge von blindmessenger suchen Nehmen Sie blindmessenger in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Excel ist die falsche Wahl: die Zahlen werden ziemlich schnell ziemlich groß - dafür hat Excel nicht die nötige Genauigkeit in der Zahlendarstellung.

Auch Computer stoßen da an die Grenzen.

Hier die Ergebnisse für die ersten 50 Zahlen. Wenn nach 10000 Schritten noch keine Schleife gefunden wurde, gebe ich einfach die größte bisher aufgetretene Zahl aus (damit du siehst, wie groß das wird).
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
1 6 3 16 8 4 2 1
2 1 6 3 16 8 4 2
3 16 8 4 2 1 6 3
4 2 1 6 3 16 8 4
5 26 13 66 33 166 83 416 208 104 52 26
6 3 16 8 4 2 1 6
12055118071437480400060668949345236147663307240585865922431721502539222186858686945218606295856291208135843156403663549198244935171953932453786036575684298315105505433943986291349740224763595309997127944057388716399081495806714494191867590895825994620028533208315364600158732167818275942906266168785977863276893488852216
8 4 2 1 6 3 16 8
12055118071437480400060668949345236147663307240585865922431721502539222186858686945218606295856291208135843156403663549198244935171953932453786036575684298315105505433943986291349740224763595309997127944057388716399081495806714494191867590895825994620028533208315364600158732167818275942906266168785977863276893488852216
10 5 26 13 66 33 166 83 416 208 104 52 26
12055118071437480400060668949345236147663307240585865922431721502539222186858686945218606295856291208135843156403663549198244935171953932453786036575684298315105505433943986291349740224763595309997127944057388716399081495806714494191867590895825994620028533208315364600158732167818275942906266168785977863276893488852216
12 6 3 16 8 4 2 1 6
13 66 33 166 83 416 208 104 52 26 13
12055118071437480400060668949345236147663307240585865922431721502539222186858686945218606295856291208135843156403663549198244935171953932453786036575684298315105505433943986291349740224763595309997127944057388716399081495806714494191867590895825994620028533208315364600158732167818275942906266168785977863276893488852216
15 76 38 19 96 48 24 12 6 3 16 8 4 2 1 6
16 8 4 2 1 6 3 16
17 86 43 216 108 54 27 136 68 34 17
12055118071437480400060668949345236147663307240585865922431721502539222186858686945218606295856291208135843156403663549198244935171953932453786036575684298315105505433943986291349740224763595309997127944057388716399081495806714494191867590895825994620028533208315364600158732167818275942906266168785977863276893488852216
19 96 48 24 12 6 3 16 8 4 2 1 6
20 10 5 26 13 66 33 166 83 416 208 104 52 26
3427256734262498071965123901364836139796960802471824625388054851888079140463270940004955424335501242360573822675361146221646090697268224953971370744830563600628973596722754057083899830266552920702255625422627800628697664368363792866361439171956743555501066513528308596994671533587975513077381224492382362243493416
12055118071437480400060668949345236147663307240585865922431721502539222186858686945218606295856291208135843156403663549198244935171953932453786036575684298315105505433943986291349740224763595309997127944057388716399081495806714494191867590895825994620028533208315364600158732167818275942906266168785977863276893488852216
12055118071437480400060668949345236147663307240585865922431721502539222186858686945218606295856291208135843156403663549198244935171953932453786036575684298315105505433943986291349740224763595309997127944057388716399081495806714494191867590895825994620028533208315364600158732167818275942906266168785977863276893488852216
24 12 6 3 16 8 4 2 1 6
75247545803496213320752115050464759867960318117839537765423170607389129480512180305752013218372437939901608622854672520479081193001888667283123046851816360852523862097925866059805173356076052989755078943476574223770613240897818077495767893572214976243334125100344685347237937033518680381828557965653428792928059896
26 13 66 33 166 83 416 208 104 52 26
27 136 68 34 17 86 43 216 108 54 27
12055118071437480400060668949345236147663307240585865922431721502539222186858686945218606295856291208135843156403663549198244935171953932453786036575684298315105505433943986291349740224763595309997127944057388716399081495806714494191867590895825994620028533208315364600158732167818275942906266168785977863276893488852216
29431440604095411132960617552112392938631121192836586724686820074558647917135466174850113026992898457362898331063631711909777673759653155404751065858604243933363050375839810281615576720614246362297675644671359170896195058121861558085614235585512682177804036153113683105856279706587587751236001388637641267765853244268116
30 15 76 38 19 96 48 24 12 6 3 16 8 4 2 1 6
75247545803496213320752115050464759867960318117839537765423170607389129480512180305752013218372437939901608622854672520479081193001888667283123046851816360852523862097925866059805173356076052989755078943476574223770613240897818077495767893572214976243334125100344685347237937033518680381828557965653428792928059896
32 16 8 4 2 1 6 3 16
33 166 83 416 208 104 52 26 13 66 33
34 17 86 43 216 108 54 27 136 68 34
7715275565719987456038828127580951134504516633974954190356301761625102199589559644939908029348026373206939620098344671486876758510050516770423063408437950921667523477724151226463833743848700998398161884196728778495412157316297276282795258173328636556818261253321833344101588587403696603460010348023025832497211832865416
12055118071437480400060668949345236147663307240585865922431721502539222186858686945218606295856291208135843156403663549198244935171953932453786036575684298315105505433943986291349740224763595309997127944057388716399081495806714494191867590895825994620028533208315364600158732167818275942906266168785977863276893488852216
18733429300543278489300706190849803658083436229099221308553546565271875089050431880399113291413263858504163409521252527619467538065053254006651798430389640229639327646216910341902972620482604251189569264021485148686731880902667078236015768448428956110564849573308706254531049904501329676785939310719031520779181887348366052656091595884128151626936616
38 19 96 48 24 12 6 3 16 8 4 2 1 6
75247545803496213320752115050464759867960318117839537765423170607389129480512180305752013218372437939901608622854672520479081193001888667283123046851816360852523862097925866059805173356076052989755078943476574223770613240897818077495767893572214976243334125100344685347237937033518680381828557965653428792928059896
40 20 10 5 26 13 66 33 166 83 416 208 104 52 26
6659394537276667148290763487751388780715430606445646197270156133839317883258590266091862925479591436088735725205813808797271549713596068551968001047239044433788906864660233769165569632740257484316373626073728886708444671171024485839326996228002064668740007781278238460928025931424134680807740550177411976632627943003896
3427256734262498071965123901364836139796960802471824625388054851888079140463270940004955424335501242360573822675361146221646090697268224953971370744830563600628973596722754057083899830266552920702255625422627800628697664368363792866361439171956743555501066513528308596994671533587975513077381224492382362243493416
43 216 108 54 27 136 68 34 17 86 43
7715275565719987456038828127580951134504516633974954190356301761625102199589559644939908029348026373206939620098344671486876758510050516770423063408437950921667523477724151226463833743848700998398161884196728778495412157316297276282795258173328636556818261253321833344101588587403696603460010348023025832497211832865416
1457874773577161457720074332958418114848377744579106658419708067645541698662055985164245442342688605997299097252555715305020502408391671127551546538207547531950017248334967098808262416648171353954679457593621910653203672119321858501621730261858489312474583518815861797185301855281661204637325834214420836618251899416
12055118071437480400060668949345236147663307240585865922431721502539222186858686945218606295856291208135843156403663549198244935171953932453786036575684298315105505433943986291349740224763595309997127944057388716399081495806714494191867590895825994620028533208315364600158732167818275942906266168785977863276893488852216
3836606320751263434608784627886039789175487739719520523991766336567680018237528449105738402081436438221652666269952517656466951795722906420562288318543798319030134301945223238021728792674837350643623785271600158451042689208866217622736029378238250211443681192613623040927959020441872317805760370835257655455576450528945367583967558837069445453196616
48 24 12 6 3 16 8 4 2 1 6
75247545803496213320752115050464759867960318117839537765423170607389129480512180305752013218372437939901608622854672520479081193001888667283123046851816360852523862097925866059805173356076052989755078943476574223770613240897818077495767893572214976243334125100344685347237937033518680381828557965653428792928059896


Und der Code (C#)
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;

namespace Infoboard
{
	class MainClass
	{
		static List<BigInteger> Collatz(int start, int factor) {
			//zum nachgucken, ob schon gefunden - HashSet ist da schneller
			HashSet<BigInteger> found = new HashSet<BigInteger> ();
			//exakte Reihenfolge des Auftretens
			List<BigInteger> sequence = new List<BigInteger> ();
			BigInteger next = new BigInteger (start);
			while (!found.Contains(next)) {
				found.Add (next);
				sequence.Add (next);
				if (next.IsEven)
					next /= 2;
				else
					next = factor * next + 1;
				if (sequence.Count > 10000)
				return new List<BigInteger> { sequence.Max() };
			}
			sequence.Add (next);
			return sequence;
		}

		static void Main(string[] args) {
			for (int i = 1; i < 50; i++) {
				Console.WriteLine (string.Join (" ", Collatz (i, 5)));
			}
		}
	}
}


__________________
Syntax Highlighting fürs Board (Link)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von eulerscheZahl: 09.04.2016 17:20.

09.04.2016 16:50 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ich habe dir noch für die klassische und die modifizierte Sequenz ein Bildchen gemalt Wink

eulerscheZahl hat diese Bilder (verkleinerte Versionen) angehängt:
graph3.png graph5.png



__________________
Syntax Highlighting fürs Board (Link)
09.04.2016 17:21 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
blindmessenger
Mitglied


Dabei seit: 09.04.2016
Beiträge: 37

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ja cool... Danke... Das muss ich erst mal sacken lassen... Doofe Frage... Wo kann ich mir den Code denn jetzt ausrechnen lassen? Bin leider absoluter Laie... Ich habe VS drauf aber da sind soviele Anwendungen... Muss ich ein neues Projekt öffnen oder eher nur eine Datei? Wie bekomme ich die Zahlen angezeigt?

__________________
Gruß blindmessenger
09.04.2016 17:40 blindmessenger ist offline Beiträge von blindmessenger suchen Nehmen Sie blindmessenger in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hast du eine VS Version, die C# unterstützt?
Ich habe die Abfolge nicht genau im Kopf - ich nutze MonoDevelop.
Neues Projekt -> C# Konsolenanwendung -> Speicherort wählen.
Dann kannst du meinen Code reinkopieren (den Namespace lässt du am besten so, wie er bei dir heißt).
Um BigInteger verwenden zu können, musst du dann noch einen Verweis hinzufügen.
Dazu in der Projektmappe (standardmäßig am rechten Rand) einen Rechtsklick auf Verweise und dann System.Numerics auswählen.

Wenn das erledigt ist, kannst du mit F5 ausführen.
Wenn die Ausgabebox sofort wieder verschwindet, füge am besten zwischen Zeile 33 und 34 noch ein Conosle.ReadLine() ein. Dann schließt sich das Fenster erst mit Enter.

__________________
Syntax Highlighting fürs Board (Link)
09.04.2016 17:47 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
blindmessenger
Mitglied


Dabei seit: 09.04.2016
Beiträge: 37

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Wie sieht es denn für 7n+1 aus? Oder 9n+1? Kannst DU mir die vielleicht auch noch kurz ausgeben? Bis ich den Code verwenden kann muss ich erst noch ein paar Bücher lesen... ;-)

__________________
Gruß blindmessenger
09.04.2016 17:49 blindmessenger ist offline Beiträge von blindmessenger suchen Nehmen Sie blindmessenger in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

7:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
1 8 4 2 1
2 1 8 4 2
4 2 1 8 4
5 36 18 9 64 32 16 8 4 2 1 8
8 4 2 1 8
9 64 32 16 8 4 2 1 8
10 5 36 18 9 64 32 16 8 4 2 1 8
16 8 4 2 1 8
18 9 64 32 16 8 4 2 1 8
20 10 5 36 18 9 64 32 16 8 4 2 1 8
32 16 8 4 2 1 8
36 18 9 64 32 16 8 4 2 1 8
40 20 10 5 36 18 9 64 32 16 8 4 2 1 8
41 288 144 72 36 18 9 64 32 16 8 4 2 1 8
64 32 16 8 4 2 1 8
72 36 18 9 64 32 16 8 4 2 1 8
73 512 256 128 64 32 16 8 4 2 1 8
80 40 20 10 5 36 18 9 64 32 16 8 4 2 1 8
82 41 288 144 72 36 18 9 64 32 16 8 4 2 1 8


9: nichts gefunden (Suche bis Startwert 10000, maximale Schleifenlänge 1000).

eulerscheZahl hat dieses Bild (verkleinerte Version) angehängt:
graph7.png



__________________
Syntax Highlighting fürs Board (Link)

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von eulerscheZahl: 09.04.2016 17:58.

09.04.2016 17:52 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
blindmessenger
Mitglied


Dabei seit: 09.04.2016
Beiträge: 37

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ja Collatz macht echt Spass... Hier noch ein paar Bildchen. Vielleicht findest Du ja noch mehr Symmetrien

blindmessenger hat diese Bilder (verkleinerte Versionen) angehängt:
Collatz Baum 3n+1.jpg Collatz Baum 5n+1.jpg Collatz Baum 7n+1.jpg
Collatz Baum 9n+1.jpg



__________________
Gruß blindmessenger
09.04.2016 18:13 blindmessenger ist offline Beiträge von blindmessenger suchen Nehmen Sie blindmessenger in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Na, meinetwegen.
Hier alle Kreise, deren Maximalwert nicht über 1 Million liegt für Faktoren < 1000.
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
3: 1, 4, 2
5: 1, 6, 3, 16, 8, 4, 2  :  17, 86, 43, 216, 108, 54, 27, 136, 68, 34
7: 1, 8, 4, 2
15: 1, 16, 8, 4, 2
31: 1, 32, 16, 8, 4, 2
63: 1, 64, 32, 16, 8, 4, 2
127: 1, 128, 64, 32, 16, 8, 4, 2
181: 27, 4888, 2444, 1222, 611, 110592, 55296, 27648, 13824, 6912, 3456, 1728, 864, 432, 216, 108, 54  :  35, 6336, 3168, 1584, 792, 396, 198, 99, 17920, 8960, 4480, 2240, 1120, 560, 280, 140, 70
255: 1, 256, 128, 64, 32, 16, 8, 4, 2
511: 1, 512, 256, 128, 64, 32, 16, 8, 4, 2

Die Kreise zur 1 hin für 2^n-1 überaschen nicht.
Für 5 und 181 gibt es 2 Kreise.
Bei 181 habe ich keinen Kreis mit Startwert 1 gefunden. Den kann es natürlich trotzdem geben, er hat dann aber definitiv eine Länge > 100000.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;

namespace Infoboard
{
	class MainClass
	{
		static void Main(string[] args) {
			int max = (int)1e6;
			int[] collatz = new int[max + 1];
			for (int f = 3; f < 1000; f+=2) {
				for (int i = 1; i <= max; i++) {
					if (i % 2 == 0)
						collatz [i] = i / 2;
					else
						collatz [i] = f * i + 1;
				}
				List<List<int>> loops = new List<List<int>> ();
				for (int start = 1; start <= max; start++) {
					if (collatz [start] == 0)
						continue;
					List<int> seq = new List<int> ();
					int current = start;
					while (current <= max && collatz[current] != 0) {
						seq.Add (current);
						int tmp = collatz [current];
						collatz [current] = 0;
						current = tmp;
					}
					if (current == start)
						loops.Add (seq);
				}
				if (loops.Count > 0)
					Console.WriteLine (f + ": " + string.Join ("  :  ", loops.Select (loop => string.Join (", ", loop))));
			}
		}
	}
}


__________________
Syntax Highlighting fürs Board (Link)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von eulerscheZahl: 09.04.2016 18:34.

09.04.2016 18:31 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
blindmessenger
Mitglied


Dabei seit: 09.04.2016
Beiträge: 37

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Danke für Deine Mühe... Ich hätte noch eine Frage und zwar bräuchte ich für den 3n+1 Code noch eine kleine Modifikation:

Der normale Collatz geht ja so:

1,4,2,1
2,1
3,10,5,16,8,4,2,1
4,2,1
5,16,8,4,2,1

Ich hätte gerne:

1
2,1
3,5,1
4,1
5,1

Also: Ich bräuchte die Collatz Reihe aber nur mit den ungeraden Zahlen... Hättest Du dafür auch noch einen Code. So könnte man sich eine Matrix bauen und untersuchen...

Das mit VS hat bei mir jetzt auch funktioniert...

__________________
Gruß blindmessenger

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von blindmessenger: 09.04.2016 20:19.

09.04.2016 20:19 blindmessenger ist offline Beiträge von blindmessenger suchen Nehmen Sie blindmessenger in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;

namespace Infoboard
{
	class MainClass
	{
		static List<long> Collatz(int n) {
			List<long> sequence = new List<long> { n };
			while (n != 1) {
				if (n % 2 == 0)
					n /= 2;
				else
					n = n * 3 + 1;
				if (n % 2 == 1)
					sequence.Add (n);
			}
			return sequence;
		}

		static void Main(string[] args) {
			for (int i = 1; i < 50; i++) {
				Console.WriteLine (string.Join (" ", Collatz (i)));
			}
		}
	}
}


Ausgabe:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
1
2 1
3 5 1
4 1
5 1
6 3 5 1
7 11 17 13 5 1
8 1
9 7 11 17 13 5 1
10 5 1
11 17 13 5 1
12 3 5 1
13 5 1
14 7 11 17 13 5 1
15 23 35 53 5 1
[...]


__________________
Syntax Highlighting fürs Board (Link)
09.04.2016 20:34 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
blindmessenger
Mitglied


Dabei seit: 09.04.2016
Beiträge: 37

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ich danke Dir...

__________________
Gruß blindmessenger
09.04.2016 23:35 blindmessenger ist offline Beiträge von blindmessenger suchen Nehmen Sie blindmessenger in Ihre Freundesliste auf
blindmessenger
Mitglied


Dabei seit: 09.04.2016
Beiträge: 37

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo,
ich habe mal spasseshalber bei dem 5n+1 Code die Startzahlen auf <8 reduziert und die Anzahl der Sequenze auf 500.000 erhöht. Die grösste Zahl für die Startzahl 7 die er dann ausspuckt hat ca.16.000 Stellen. Ist diese Zahl noch exakt. Oder sind da dann Fehler bei der Berechnung?

Gruß

__________________
Gruß blindmessenger

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von blindmessenger: 10.04.2016 20:22.

10.04.2016 20:12 blindmessenger ist offline Beiträge von blindmessenger suchen Nehmen Sie blindmessenger in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Es sind "nur" 16096 Stellen (wie du in deinem Edit ja auch erkannt hast).
Die Zahl ist noch exakt. Das ist auch der Grund, warum ich von Excel abgeraten habe.

Aus der Hilfe:
Zitat:
Der BigInteger-Typ ist ein unveränderlicher Typ, der eine beliebig große ganze Zahl darstellt, deren Wert theoretisch keine obere oder untere Grenze hat.

Die Begrenzung liegt nur im vorhandenen Arbeitsspeicher. Die errechnete Zahl braucht bei guter Speicherverwaltung knapp 7kB, das ist also kein Problem.

__________________
Syntax Highlighting fürs Board (Link)
10.04.2016 20:36 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
blindmessenger
Mitglied


Dabei seit: 09.04.2016
Beiträge: 37

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Wenn man jetzt eine Funktion Anzahl Stellen und Anzahl Rechenschritte hätte könnte man vielleicht sehen, dass die Anzahl der Rechenschritte gegen unendlich geht ohne eine Schleife zu haben...

__________________
Gruß blindmessenger
10.04.2016 20:44 blindmessenger ist offline Beiträge von blindmessenger suchen Nehmen Sie blindmessenger in Ihre Freundesliste auf
Seiten (3): [1] 2 3 nächste » Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Collatz Schleife