skip to main |
skip to sidebar
merhaba
bu dersimizde Asal sayıların bulunması konusunu ele alacağız. Bu dersi anlayabilmek için Asal Sayı Bulma - I dersini okumış olmanız gerekmektedir.
Hatırlayacaksanız Asal Sayılar - I dersinde bir sayının asal olup olmadığını kolaylıkla bulabiliyorduk. Bu dersimizde ise verilen n sayısına kadar olan tüm asal sayıları listelemeyi göreceğiz.
Burada yazacağımız algoritmadan daha etkin çalışan algoritmalar elbetteki yazılabilir. Ancak burada algoritma konusuna yeni girenler için oldukça basit ve sade bir düşünce ile algoritma geliştirme amaçlanmaktadır.
Verilen n sayısına kadar olan asal sayıları bulmak için 2 den başlayarak n sayısına kadar tüm sayıların teker teker asal olup olmadıkları kontrol edilir. Kısaca algoritma şu şekilde yazılabilir.
1. n = girilen sayı
2. for i=2 to n
2.1. i sayının asal olup olmadığını bul
2.2. i sayısı asal ise
print(i)
yukarıda 2.1. adımında i sayısının asal olup olmadığının bulunması daha önceki Asal Sayı Bulma - I dersinde anlatılmıştı. Orada kullanılan algoritma buraya aynen taşınırsa son algoritma şu şekilde olmaktadır.
1. n = girilen sayı
2. for i=2 to n
2.1. bolen_sayisi = 0
2.2. for j=2 to i-1
if (i mod j) = 0 // tam bölünüyorsa
bolen_sayisi = bolen_sayisi + 1 // bölen sayısını bir arttır.
2.3. if bolen_sayisi = 0
print(i)
yukarıda verilen algoritma verilen n sayısına kadar olan asal sayıları çıktı olarak vermektedir.
Örneğin n sayısı 25 verildiğinde çıktı;
2, 3, 5, 7, 11, 13, 17, 19, 23
olmaktadır.
Not : Bu ders aynı zamanda CETURK.com adresinde de yayınlanmaktadır.
Forumlarında çokça tartışılan ve yardım istenilen bir konu olan Asal sayılar konusunu bu yazı dizisinde ele alacağım.
Yazılarımı başlangıç seviyesinden ileri seviyeye doğru anlatmaya başlayacağım. Bu derste algoritma konusuna henüz yeni giren ve daha önce profesyonel düzeyde programlama ile uğraşmamış olan arkadaşlar için temel algoritmaları ele alacağım.
İlk olarak asal sayı nedir sorusundan başlayalım. Asal sayı bilindiği gibi 1 ve kendisinden başka hiç bir sayıya bölünemeyen sayıdır.
Bu tanımdan hareketle biz de sıfırdan başlayarak asal sayıların nasıl bulunduğunu kısaca gözden geçirelim.
Öncelikle verilen bir sayının bölenlerinin sayısını bulalım. Algotirmayı şu şekilde yazabiliriz.
1. n = girilen sayı
2. bolen_sayisi = 0
3. for i=1 to n
if (n mod i) = 0 // tam bölünüyorsa
bolen_sayisi = bolen_sayisi + 1 // bölen sayısını bir arttır.
4. print(bolen_sayisi)
yukarıdaki yazılan algoritma basit düzeyde bir tam sayının tam bölenlerinin sayısını bulmatadır. Örneğin
10 sayısı için 1,2,5 ve 10 sayılarına bölüneceğinden bölen sayısı 4
11 sayısı için 1 ve 11 sayılarına bölüneceğinden bölen sayısı 2 olcaktır.
Şimdi algoritmamızı biraz daha geliştirelim. 1 ve kendinden başka bölen sayısını bulmaya çalışalım. Ozaman algoritmanın çalışma sınırlarını biraz değiştirmemiz gerekecek. yani 2 den başlayarak sayının bir eksiğine kadar gitmemiz yeterli olacak.
Yeni algoritma
1. n = girilen sayı
2. bolen_sayisi = 0
3. for i=2 to n-1
if (n mod i) = 0 // tam bölünüyorsa
bolen_sayisi = bolen_sayisi + 1 // bölen sayısını bir arttır.
4. print(bolen_sayisi)
Yeni yazılan algoritmada 10 sayısı için 2 ve 5 i bölen olarak alacak ve bölen sayısı 2 olacaktır.
11 sayısı için bölen sayısı 0 olacaktır.
Son olarak algoritmaya bölen sayısı 0 olursa asal sayıdır diyebileceğimiz bir satır eklersek işlem tamamlanmış olacak.
Yeni algoritma
1. n = girilen sayı
2. bolen_sayisi = 0
3. for i=2 to n-1
if (n mod i) = 0 // tam bölünüyorsa
bolen_sayisi = bolen_sayisi + 1 // bölen sayısını bir arttır.
4. print(bolen_sayisi)
5. if bolen_sayisi = 0
print('sayı asaldır')
else
print('sayı asal değildir')
Bu şekilde bir sayının asal olup olmadığı rahatlıkla bulunabilir.
Bu dersi hazırlarken algoritma konusuna henüz yeni başlayanları dikkate aldım. Elbetteki bu algoritmalar daha iyi şekilde yazılabilirler. Daha gelişmiş ve dahi iyi olan yöntemleri daha sonraki derslerimizde vermeye çalışacağım.
Bir sonraki dersimizde görüşmek üzere
Not : Bu içerik aynı zamanda CETURK.com sitesinde de yayınlanmaktadır