C# :: Aufgabe #204
3 Lösungen

Fibonacci und die Zahl 89
Anfänger - C#
von hollst
- 14.05.2018 um 13:09 Uhr
Wenn man die Glieder der Fibonacci-Folge
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233 ...
entsprechend nachfolgendem Schema anordnet
0.0
0.01
0.001
0.0002
0.00003
0.000005
0.0000008
0.00000013
0.000000021
0.0000000034
0.00000000055
0.000000000089
0.0000000000144
.
.
und die Glieder aufaddiert, ergibt sich
----------------
0.01123595505...
Diese rationale Zahl beginnt mit den gleichen Nachkommadigits wie 1/89:
1/89 = 0.0112359550561798... (16 Nachkommastellen (Double))
= 0.01123595505617977528089887640449... (Taschenrechner (Abb. 1), 32 Nachkommastellen)
Berücksichtigt man bei obiger Addition quasi alle Summanden, so wird vermutet, dass sich in der Tat 1/89 exakt ergibt, unglaublich, wenn wahr, oder?
Diese Eigenschaft der Fibonacci-Folge wurde erst 1994 entdeckt (von einem Herrn Cody Birsner, damals Student in Oklahoma). Also, auch heute
ist noch genügend Platz für grandiose und phantastische Entdeckungen in der Zahlentheorie.
Man zeige mittels Programmierung, dass die Vermutung (die mittlerweile bewiesen ist) selbst bis zur Taschenrechnergenauigkeit mit 32 Nachkommastellen nicht widerlegt wird.
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233 ...
entsprechend nachfolgendem Schema anordnet
0.0
0.01
0.001
0.0002
0.00003
0.000005
0.0000008
0.00000013
0.000000021
0.0000000034
0.00000000055
0.000000000089
0.0000000000144
.
.
und die Glieder aufaddiert, ergibt sich
----------------
0.01123595505...
Diese rationale Zahl beginnt mit den gleichen Nachkommadigits wie 1/89:
1/89 = 0.0112359550561798... (16 Nachkommastellen (Double))
= 0.01123595505617977528089887640449... (Taschenrechner (Abb. 1), 32 Nachkommastellen)
Berücksichtigt man bei obiger Addition quasi alle Summanden, so wird vermutet, dass sich in der Tat 1/89 exakt ergibt, unglaublich, wenn wahr, oder?
Diese Eigenschaft der Fibonacci-Folge wurde erst 1994 entdeckt (von einem Herrn Cody Birsner, damals Student in Oklahoma). Also, auch heute
ist noch genügend Platz für grandiose und phantastische Entdeckungen in der Zahlentheorie.
Man zeige mittels Programmierung, dass die Vermutung (die mittlerweile bewiesen ist) selbst bis zur Taschenrechnergenauigkeit mit 32 Nachkommastellen nicht widerlegt wird.
Lösungen:

using System; using System.Collections.Generic; namespace ConsoleFibonacci89 { class Program { const decimal real89 = 1m / 89m; static void Main(string[] args) { decimal added89 = Calc89(100); Console.WriteLine($" 1 / 89 = {real89}"); Console.WriteLine($"Fibonacciglieder aufsummiert = {added89}"); Console.ReadLine(); } static decimal Calc89(int n) { var fibonacci = GetFibonacciNumbers(n); decimal i = 1; decimal added89 = 0; foreach (ulong u in fibonacci) { decimal add = u; for (int j = 0; j < i; j++) { add /= 10m; } i++; added89 += add; } return added89; } static IEnumerable<ulong> GetFibonacciNumbers(int n) { yield return 0; yield return 1; yield return 1; ulong last = 1; ulong current = 1; for (int i = 0; i < n - 3; i++) { ulong next = last + current; last = current; current = next; yield return next; } } } }

using static System.Console; using System.Numerics; namespace aufgabe_204_fibo_89 { class Program { static void Main() { int exponent = 100; BigInteger erg = 0; for (var i = 0; i < exponent; i++) erg += i.bi_fibo() * BigInteger.Pow(10, exponent - i); WriteLine(" " + erg); WriteLine(1.0/89); //16 Nachkommastellen WriteLine(" " + BigInteger.Parse("100000000000000000000000000000000") / 89); //32 Nachkommastellen //ohne erste null ReadKey(false); } } public static class MyExtensions { public static BigInteger bi_fibo(this int i) { BigInteger f0 = 0, f1 = 1; while(i-- > 0) { BigInteger f = f1 + f0; f0 = f1; f1 = f; } return f0; } } }

using System; using System.Collections.Generic; using System.Linq; using System.Numerics; using System.Text; using System.Threading.Tasks; namespace fibo81v2 { class Program { static void Main(string[] args) { BigInteger fibsum = 0; BigInteger fib = 0; BigInteger e = 0; BigInteger y = 1; int goal = 0; int counter = 50; //die letzen Ziffern stimmen nicht weswegen ich die Zahl auf 50 stellen berchne (dadurch sind die ersten 32 korrekt) while (counter != goal) { fib = e + y; y = e; e = fib; counter--; for(int i = counter;i >1;i-- ) { fib *= 10; } Console.WriteLine(fib); fibsum += fib; } Console.WriteLine(fibsum); Console.Read(); } } }
Das Programm ist nicht das Beste aber es liefert die richtige Lösung.