Collatz Conjecture [Python]

Ertan Özdemir
Mar 23 · 2 min read
https://unsplash.com/@davidclode

Bu yazımda size Collatz Conjecture’dan ve bunun Python’a uyarlanmasından bahsedeceğim. Türkçe’ye Collatz Sanısı olarak geçen bu teorem, 1'den büyük doğal sayıların çift veya tek olması farketmeksizin 1'e indirgemeye yarayan hesaplama işlemidir. Belirtmekte fayda var; bu teorem halen kesinleşmemiştir. Bilim insanları 20 × 258 ≈ 5.764×1018. sayısına kadar olan sayıları, ancak kanıtlayabildi. Collatz’ta çift sayılar ve tek sayılar için ayrı ayrı çok basit iki formül kullanılıyor.

Çift sayılar için: x/2

Tek sayılar için: (3x)+1

Formülleri öğrendiğimize göre küçük bir örnekle mantığını oturtalım.

Diyelim ki x=5 olsun. Biz bu sayıyı 1 yapana kadar yukarıdaki formülleri uygulayacağız. 5 bir tek sayı o halde işleme tek sayılar için olan formülle başlıyoruz.

Adım 1: (7x3)+1 = 22 (Çift)

Adım 2: 22/2 = 11 (Tek)

Adım 3: (11x3)+1 = 34 (Çift)

.

.

.

.

Adım 16: 2/2 = 1

Bu işlem 16 adımdan oluşuyor. Adım sayısı seçtiğiniz doğal sayıya göre değişiklik gösterebilir.

Şimdi bunu Python’a dökelim!

Collatz Conjecture (Sanısı) Python
Resim: ww.pcbilmi.com

İlk olarak bu işlemleri yapabileceğimiz collatz() adında bir fonksiyon tanımladık. Bu fonksiyona gelen sayi değerini, fonksiyonumuz içerisinde bolum değerine atadık. Bunun nedenini bilmeyenler için küçük bir resim olarak sola ekledim 😂

Sonuç, yani bölüm 1 oluncaya kadar işlemlerimizin devam etmesini istiyoruz. While döngüsü yardımıyla bu işin üstesinde gelebiliriz 💪 Bu adımı da yaptığımıza göre sıra artık sayımızın çift mi yoksa tek mi olduğuna karar vermeye geliyor. Matematiğin en zevkli konusu olan (bana göre) modüler aritmetiği kullanacağız. Eğer bir sayı çift ise onun 2'ye bölümünden kalan 0 olur. Eğer kalan sıfır değilse bu sayı tek sayıdır. Burada mod hesaplama operatörümüz olan “%” sembolünü kullanacağız.

if’ in anlamı:

Eğer bolum değişkeninin 2'ye göre mod’u 0 ise bu sayı çifttir. İşte bu yüzden çift sayı formülünü uygula ve bunu tekrar denetlenmek üzere bolum’e ata.

else’in anlamı:

Eğer bu sayı çift değilse demek ki bu sayı tek! O halde tek sayılar için olan formülü uygula ve bolum’e ata.

Şimdi derin bir nefes al ve koda uzaktan şöyle bir bak. Daha iyi anlayacağını düşünüyorum (eğer Python’da yeniysen).

Özet olarak açıklayalım bir de. Sen bir sayı girdin, bu ilk bolum’e atanıyor. Daha sonra karar mekanizmamız olan if’ten geçiyor. Eğer sayı çiftse bolum’e bu sayı atanıp döngü başa dönüyor. Aaa… Sayı tek mi? O halde sayı else’e geliyor. Burada gerekli işlemler yapılıp bolum’e atanıyor ve döngü tekrar başa dönüyor. printler içerisinde kullandığım .format metodu ise sadece String ifadeler müdahale etmeme yarıyor. Kodu çalıştırdığınız zaman amacını daha iyi anlayacaksınız.

Buraya kadar sıkılmadan okuduğunuz için sizi tebrik ediyor ve teşekkür ediyorum 😘

ROYTO

Resmî Olmayan Yazılım Topluluğu

Ertan Özdemir

Written by

Computer Engineer

ROYTO

ROYTO

Resmî Olmayan Yazılım Topluluğu

More From Medium

More on Python from ROYTO

Ertan Özdemir
Feb 29 · 2 min read

59

Also tagged Python

Top on Medium

Ed Yong
Mar 25 · 22 min read

22K

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade