JAVA DA BIGINTEGER İLE HAYAL EDEMEYECEĞİNİZ FIBONACCI SAYILARINA ULAŞIN

JAVA DA BIGINTEGER İLE HAYAL EDEMEYECEĞİNİZ FIBONACCI SAYILARINA ULAŞIN

Herşey fibonaccinin 47. sayısını aramakla başladı. Çünkü yazılımla ilgilenenler için fibonacci 47 çok özel bir sayıdır. 32 bit integer'ı geçen ilk fibonacci sayısıdır. Integer'ın max değeri 2.147.483.647 iken fibonacci 47 ise 2.971.215.073 sayısıdır. Peki fibonaccinin hayal edemeyeceğiniz uzunlukta olan 47. sayısına ve sonrasına nasıl ulaşabiliriz.

Fibonacci'nin 47. sayısına ulaşmak kolayda peki 1 milyonuncu fibonacci sayısına nasıl ulaşabiliriz veya 1 milyarıncı. Bunun için Java'da bulunan BigInteger kütüphanesini kullanacağız. 

import java.math.BigInteger;

Kütüphaneyi kullanmak için yukarıdaki kodu ekliyoruz.

int howManyNumber;
Scanner input = new Scanner(System.in);

BigInteger n1 = BigInteger.valueOf(0);
BigInteger n2 = BigInteger.valueOf(1);
BigInteger sequence = BigInteger.ZERO;

Yukarıdaki kodda kullanacağımız değişkenleri tanımladık. 

howManyNumber: kullanıcıdan aldığımız değeri tutacak integer türünde bir değişkendir. 

input: kullanıcıdan değer almak için kullanacağımız bir Scanner objesidir. 

n1,n2sequence: Fibonacci dizisini oluştururken kullacağımız BigInteger nesneleridir. n1 ve n2 nesnelerine static valueOf metodu ile 0 ve 1 değerlerini atadık. sequence değişkeni içinde static ZERO değişkenini kullanarak 0 değerini atadık. sequence değişkenine valueOf metodu ile de 0 değeri ataması yapılabilir. 

System.out.print("How many fibonacci sequences are used:  ");
howManyNumber = input.nextInt();

Kullanıcıdan kaçıncı fibonacci dizisine kadar ulaşmak istediğini soruyoruz ve input nesnesi ile howManyNumber değişkenine girilen değeri atıyoruz.






for(int i=0; i < howManyNumber; i++)
{
   sequence = (n1.add(n2));
   n2 = n1;
   n1 = sequence;
   System.out.println((i+1) + ". fibonacci number=  " + sequence);
}

İstenilen sayıya kadar fibonacci dizisini oluşturan bir for döngüsü oluşturduk. Döngü her çalıştığında sequence değişkenine kendisini temsil eden n1 ve kendinden bir önceki fibonacci sayısını temsil eden n2 toplanarak değer ataması yapılır. Döngünün içindeki son satırda da elde ettiğimiz fibonacci sayıları ekrana basılır.

Kodu çalıştırdığımızda elde ettimiz output aşağıdaki gibidir. (howManyNumber için 100 değeri girilmiştir)

How many fibonacci sequences are used:  100
1. fibonacci number=  1
2. fibonacci number=  1
3. fibonacci number=  2
4. fibonacci number=  3
5. fibonacci number=  5
6. fibonacci number=  8
7. fibonacci number=  13
8. fibonacci number=  21
9. fibonacci number=  34
10. fibonacci number=  55
11. fibonacci number=  89
12. fibonacci number=  144
13. fibonacci number=  233
14. fibonacci number=  377
15. fibonacci number=  610
16. fibonacci number=  987
17. fibonacci number=  1597
18. fibonacci number=  2584
19. fibonacci number=  4181
20. fibonacci number=  6765
21. fibonacci number=  10946
22. fibonacci number=  17711
23. fibonacci number=  28657
24. fibonacci number=  46368
25. fibonacci number=  75025
26. fibonacci number=  121393
27. fibonacci number=  196418
28. fibonacci number=  317811
29. fibonacci number=  514229
30. fibonacci number=  832040
31. fibonacci number=  1346269
32. fibonacci number=  2178309
33. fibonacci number=  3524578
34. fibonacci number=  5702887
35. fibonacci number=  9227465
36. fibonacci number=  14930352
37. fibonacci number=  24157817
38. fibonacci number=  39088169
39. fibonacci number=  63245986
40. fibonacci number=  102334155
41. fibonacci number=  165580141
42. fibonacci number=  267914296
43. fibonacci number=  433494437
44. fibonacci number=  701408733
45. fibonacci number=  1134903170
46. fibonacci number=  1836311903
47. fibonacci number=  2971215073
48. fibonacci number=  4807526976
49. fibonacci number=  7778742049
50. fibonacci number=  12586269025
51. fibonacci number=  20365011074
52. fibonacci number=  32951280099
53. fibonacci number=  53316291173
54. fibonacci number=  86267571272
55. fibonacci number=  139583862445
56. fibonacci number=  225851433717
57. fibonacci number=  365435296162
58. fibonacci number=  591286729879
59. fibonacci number=  956722026041
60. fibonacci number=  1548008755920
61. fibonacci number=  2504730781961
62. fibonacci number=  4052739537881
63. fibonacci number=  6557470319842
64. fibonacci number=  10610209857723
65. fibonacci number=  17167680177565
66. fibonacci number=  27777890035288
67. fibonacci number=  44945570212853
68. fibonacci number=  72723460248141
69. fibonacci number=  117669030460994
70. fibonacci number=  190392490709135
71. fibonacci number=  308061521170129
72. fibonacci number=  498454011879264
73. fibonacci number=  806515533049393
74. fibonacci number=  1304969544928657
75. fibonacci number=  2111485077978050
76. fibonacci number=  3416454622906707
77. fibonacci number=  5527939700884757
78. fibonacci number=  8944394323791464
79. fibonacci number=  14472334024676221
80. fibonacci number=  23416728348467685
81. fibonacci number=  37889062373143906
82. fibonacci number=  61305790721611591
83. fibonacci number=  99194853094755497
84. fibonacci number=  160500643816367088
85. fibonacci number=  259695496911122585
86. fibonacci number=  420196140727489673
87. fibonacci number=  679891637638612258
88. fibonacci number=  1100087778366101931
89. fibonacci number=  1779979416004714189
90. fibonacci number=  2880067194370816120
91. fibonacci number=  4660046610375530309
92. fibonacci number=  7540113804746346429
93. fibonacci number=  12200160415121876738
94. fibonacci number=  19740274219868223167
95. fibonacci number=  31940434634990099905
96. fibonacci number=  51680708854858323072
97. fibonacci number=  83621143489848422977
98. fibonacci number=  135301852344706746049
99. fibonacci number=  218922995834555169026
100. fibonacci number=  354224848179261915075

Bir cihaza (bilgisayar, hesap makinesi, telefon vs) gerekli zaman ve bellek verildiği takdirde büyük fibonacci sayılarına bu yolla kolayca ulaşılabilir. Buradan 20.899 basamak uzunluğunda olan fibonacci 100.000'e göz atabilirsiniz.

Bu yazımda size büyük fibonacci sayılarına JAVA ile BigInteger kütüphanesini kullanarak nasıl ulaşılabilir bahsetmeye çalıştım. Umarım faydalı olmuştur. Herhangi bir sorunuz, eleştiriniz veya öneriniz varsa bu gönderinin altına yorum yapabilirsiniz veya buradan bana mesaj gönderebilirsiniz.

Bu gönderiyi paylaşın


Yorumlar (0)

Yorum Yapın