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
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