1 Ocak 2014 Çarşamba

Problem 2 - Even Fibonacci Numbers



Soru

Fibonnaci dizisi, 1'den başlayarak bir önceki terime kendisini ekleyerek elde edilen dizidir.

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

Şeklinde devam eder, bu sayıları birbirine oranladığımızda giderek Altın Oran'a yaklaştığı görülür.

4 milyon'un altındaki fibonacci sayılarından çift olanların toplamı nedir?


Çözüm

Fibonacci serisini elde etmek için çeşitli fonksiyonlar kullanmak mümkün. Bazı matematiksel ifadeler, tersine dönüşümlü(recursive fn.) fonksiyonlar... Fakat kolay anlaşılır olması için basit yöntem kullanacağım.


Kodlama

int[] fibonacci = new int[500000]; // Rastgele bir maksimum değer, şuanda önemsiz bir detay
int fibo = 1, toplam = 0, sayici = 0, limit = 4000000;

while (fibo < limit)
{
      fibonacci[sayici+1] = fibonacci[sayici] + fibo; // Yeni terim, bir önceki ve iki öncekinin toplamı
      fibo = fibonacci[sayici]; // İki önceki artık bir önceki konumunda

      if (fibonacci[sayici] < limit && fibonacci[sayici] % 2 == 0) // Eğer limitin altında ve çiftse
      {
         toplam += fibonacci[sayici]; // Toplama ekle
         Console.WriteLine(fibonacci[sayici]);
      }

      sayici++;
}
Console.WriteLine("Toplam: {0}", toplam);
Console.ReadKey();

Sonuç : 4613732 çıkacaktır. 
Bir noktaya dikkat, bu sayı 4 milyonun altındaki tek veya çift tüm fibonacci sayılarının toplamının yarısıdır.


Python


fibo = 1
min = 1
max = 2
sum = 3 # 1,2... 1+2

while(fibo<4000000):
    fibo = max + min
    min = max
    max = fibo
    if(fibo<4000000 and fibo%2==0):
        sum = sum + fibo
    print fibo

print "Sum = ", sum

Hiç yorum yok:

Yorum Gönder