Fibonacci-numbers

attex

Mitglied
Moin Leute,

ich hab mal im Internet ne kleine Aufgabe gelesen und komm mal wieder nicht weiter.

aufgabe:
Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.



Java:
public class main2 {
public static void main(String [] args){
	int[] array1 = new int[1000000];
	int i=0;
	int sum=0;
	array1[1]=1;
	array1[2]=2;
	for(i=2; i<33; i++  ){
		array1[i+1]=array1[i]+array1[i-1];
		System.out.println(array1[i]);
		
	}
	for(i=0; i<33; i++){
		sum += array1[i];
		
	}
	System.out.println("summe:"+sum);
}
}

Mein array1 gibt schon die richtigen zahlen aus:
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
46368
75025
121393
196418
317811
514229
832040
1346269
2178309
3524578
summe:9227463 (plus 1, da ich oben mit i=2 anfange)

aber wenn ich auf der Plattform die Lösung eingebe sagt er dass ich die falsche Lösung habe,
habe ich die Aufgabe richtig gemacht? oder ist nur ein leichtsinnsfehler drin?

Danke
 

Joose

Top Contributor
Du hast die Aufgabenstellung nicht richtig gelesen.
Suche alle Fibonacci Zahlen bis 4 Millionen und addiere dann die ...... Zahlen. Für die "....." gehört ein Attribut eingesetzt ;)

EDIT: Bei so einer Fragestellung wäre es auch hilfreich vielleicht auf die entsprechende Webseite zu linken.
 
Zuletzt bearbeitet:

stg

Top Contributor
Du sollst alle geraden Fibonacci-Zahlen aufaddieren. Also 2+8+34+...

Am Ende muss diese Summe natürlich selbst auch wieder gerade sein.

Diese Summe kannst du übrigens auch in konstanter Zeit ausrechnen, aber das wird nicht gefordert sein.
 
Zuletzt bearbeitet:

stg

Top Contributor
Das bezweifle ich einfach mal. Du meinst vermutlich "linearer Zeit".

Nein, ich meine tatsächlich in konstanter Zeit.

Ich habe meinen Post, nachdem ich kurz darüber nachgedacht habe, noch editiert und die Aussage verschärft. Es ist sogar möglich die Summe der ersten gerade Fibonacci-Zahlen, die kleiner sind als eine vorgegebene Zahl X, in konstanter Zeit zu bestimmen.
Grundkentnisse in Analysis sind aber Vorraussetzung.
 

stg

Top Contributor
@njans:
Nagut, so "wirklich" in konstanter Zeit wird wohl doch etwas schwierig. Ich hab in meinen ersten Überlegung angenommen, dass alle mathematischen Operation in konstanter Zeit ausgeführt werden können. Die Funktionen aus java.math besitzen zwar eine ziemlich gute Konvergenzgeschwindigkeit, aber wirklich konstante Rechenzeit ist das ja nicht. Die einzelnen Fibonacci-Zahlen muss man jedoch nicht berechnen, um die gefragte Summe zu berechnen, sondern es geht auch explizit. Ich meinte das in etwa so:

Java:
public class Fibo {
    private static final double sqrt5 = Math.sqrt(5.0);
    private static final double log5 = Math.log(5.0);
    private static final double div = Math.log(0.5+0.5*Math.sqrt(5));
    
    public static void main(String ... args) {
        System.out.println(System.currentTimeMillis());
        System.out.println(Fibo.sumUpEvenFibonacciNumbers(4000000l));  
        System.out.println(System.currentTimeMillis());
        System.out.println(Fibo.sumUpEvenFibonacciNumbers(2000000000l));
        System.out.println(System.currentTimeMillis());
        System.out.println(Fibo.sumUpEvenFibonacciNumbers(4000000000000l));
        System.out.println(System.currentTimeMillis());  
    }
    
    private static long fibonacciNumbersInRange(long maxValue) {
        return (long) Math.floor((Math.log(maxValue+0.5)+0.5*Fibo.log5)/Fibo.div);            
    }
    
    private static long evenFibonacciNumbersInRange(long maxValue) {
            return Fibo.fibonacciNumbersInRange(maxValue)/3+1;
    }
    
    private static long sumUpEvenFibonacciNumbers(long maxValue) {
        return Fibo.sumUpFirstEvenFibonacciNumbers(Fibo.evenFibonacciNumbersInRange(maxValue));
    }
    
    private static long sumUpFirstEvenFibonacciNumbers(long count) {
        return (long) Math.floor(Math.pow(2+Fibo.sqrt5,count) / (5+Fibo.sqrt5));
    }
}

Code:
run:
// 1410884048599 // System.currentTimeMillis()
4613732
// 1410884048599 // System.currentTimeMillis()
1485607536
// 1410884048599 // System.currentTimeMillis()
2026369768940
// 1410884048599 // System.currentTimeMillis()
BUILD SUCCESSFUL (total time: 0 seconds)

Eventuelle Überläufe und Rundungsfehler mal außer Acht gelassen, mir gings nur um die Idee..
Die Laufzeit ist jedenfalls praktisch nahezu konstant.
 
Zuletzt bearbeitet:

JavaMeister

Gesperrter Benutzer
Möglicherweise vergeht bei der Rechnung nicht viel Zeit, dennoch ist das keine konstante Laufzeit (O(1)). Dafür müsstest du für beliebige n O(1) hinbekommen.

Aber das ist hier nicht möglich und das zeigst du auch mit deiner Rekursion. Diese verläuft dann, ohne es genauer gerechnet zu haben, mit O(log n) oder O (n log n) aber das ist ja alles andere als O(1).

Daher die irritation.
 

stg

Top Contributor
Möglicherweise vergeht bei der Rechnung nicht viel Zeit, dennoch ist das keine konstante Laufzeit (O(1)). Dafür müsstest du für beliebige n O(1) hinbekommen.

Aber das ist hier nicht möglich und das zeigst du auch mit deiner Rekursion. Diese verläuft dann, ohne es genauer gerechnet zu haben, mit O(log n) oder O (n log n) aber das ist ja alles andere als O(1).

Daher die irritation.

Da ist nirgends ein rekursiver Aufruf. Das einzige, was nicht wirklich in konstanter Zeit (aber mit sehr schneller Konvergenzgeschwindigkeit) läuft, ist die Auswertung von Math.pow und Math.log.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Abwandlung der Fibonacci Folge Java Basics - Anfänger-Themen 3
T Fibonacci mit einer Hilfsmethode berechnen Java Basics - Anfänger-Themen 10
123456789sssssaaaa Which is the best way to Print Fibonacci Series in Java? Java Basics - Anfänger-Themen 3
jhCDtGVjcZGcfzug Fibonacci Zahlen rekursiv und iterativ Java Basics - Anfänger-Themen 21
J Fibonacci-Reihe Java Basics - Anfänger-Themen 12
G Fibonacci Zahlenreihe Fehler Java Basics - Anfänger-Themen 4
D Fibonacci overflow integer Java Basics - Anfänger-Themen 8
B Fibonacci Zahlen dynamische Programmierung Java Basics - Anfänger-Themen 7
N Dynamisches Programmieren/Fibonacci Java Basics - Anfänger-Themen 1
V Fibonacci Folge Java Basics - Anfänger-Themen 4
S Fibonacci Zahlen rekursiv Java Basics - Anfänger-Themen 1
A Fibonacci Zahlen Java Basics - Anfänger-Themen 1
M Methoden Fibonacci-Folge Java Basics - Anfänger-Themen 6
J Fibonacci -Folge rekursiv berechnen Java Basics - Anfänger-Themen 18
P Fibonacci -Verallgemeintert Java Basics - Anfänger-Themen 2
K Methoden Fibonacci in Array mit rekursiver Methoden Java Basics - Anfänger-Themen 19
M Fibonacci rekursiv mittels Cache Java Basics - Anfänger-Themen 17
T Stack Overflow - Rekursive Fibonacci Java Basics - Anfänger-Themen 10
K Fibonacci Zahlen Java Basics - Anfänger-Themen 3
B Fibonacci Zahlen rekursiv Array Java Basics - Anfänger-Themen 12
M Fibonacci-Folge mit while-Schleife Java Basics - Anfänger-Themen 4
P fibonacci - do while Statement Logik Fehler Java Basics - Anfänger-Themen 5
K Rekursion Fibonacci Java Basics - Anfänger-Themen 3
J Fibonacci Zahlen berechnen Java Basics - Anfänger-Themen 3
Z Fibonacci rekursiv meine Erklärung stimmt so? Java Basics - Anfänger-Themen 2
Z Fibonacci Array Erklärung Java Basics - Anfänger-Themen 5
A Gerade Terme der Fibonacci-Folge aufsummieren Java Basics - Anfänger-Themen 12
M Fibonacci, Fakultaet, GGT Java Basics - Anfänger-Themen 9
C Fibonacci Zahlen Java Basics - Anfänger-Themen 7
J Ausgabe der fibonacci Zahlen Java Basics - Anfänger-Themen 4
S Fibonacci Folge Java Basics - Anfänger-Themen 34
D Fibonacci Java Basics - Anfänger-Themen 11
M Fibonacci-Linear und Rekursiv Java Basics - Anfänger-Themen 14
W Fibonacci Zahlenberechnung Java Basics - Anfänger-Themen 9
X Fibonacci mit durchschnittlicher Zeit Java Basics - Anfänger-Themen 5
I Fibonacci-Folge , direkter Weg. Java Basics - Anfänger-Themen 5
G Fibonacci Algorithmus Java Basics - Anfänger-Themen 22
0 Fibonacci Zahlen seeeehr schnell berechnen Java Basics - Anfänger-Themen 9
S Fibonacci Rückrechnung! Java Basics - Anfänger-Themen 5
K Fibonacci Zahlen Java Basics - Anfänger-Themen 2
K Programmieren von den ersten 70 Fibonacci-Zahlen Java Basics - Anfänger-Themen 2
G fibonacci was stimmt an meinem code nicht? Java Basics - Anfänger-Themen 2
S Fibonacci Zahlenvergeich Java Basics - Anfänger-Themen 6
G Iterativer Algorithmus zur Berechnung der Fibonacci Zahlen Java Basics - Anfänger-Themen 1
P Fibonacci-Zahlen Java Basics - Anfänger-Themen 6
J Zusammenhang Numbers und nummerische Datentypen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben