18 Ocak 2009 Pazar

Asal Sayı Bulma-II

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.
           

Asal Sayı Bulma-I

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

8 Eylül 2008 Pazartesi

Başarılı bir Lisans Eğitimi İçin...

merhaba,
Bildiğiniz gibi gelecek hafta 2008-2009 öğretim yılı başlayacak. Her yıl olduğu gibi bu yıl da öğrenci arkadaşlarımız için yeni bir başlangıç anlamına gelmektedir. Yeni yılda daha önceki yıllarda olduğu gibi önce dersler daha sonra arasınav, 2. arasınavlar, f,naller derken dönem bitmekte ve seneler gözümüzün önünden akıp gitmektedir. Önemli olan bu geçen yılları amacına en uygun şekilde geçirmek ve başarılı bir lisans eğitimini tamamlamaktır. Bunun için sizlere bazı önerilerde bulunacağım. bu önerilerin bir çoğunu ben kendim denedim ve bizzat faydasını gördüm. Umarım siz değerli öğrenci arkadaşlarım da aynı şekilde başarılı olursunuz.

Başarılı Olmak için...
  • sabahları erken kalkın
  • kahvaltı mutlaka yapın
  • tüm derslere gelip dersi derste anlamaya çalışın
  • anlamadığınızı sorun
  • öğrenemediğinizi arkadaşlarınıza sorun
  • yardım edin, yardım görürsünüz
  • alçakgönüllü olun
  • az çalışın ama öz olsun 
  • sosyal çevre edinin
  • sinema ya da tiyatroya mutlaka gidin
  • sınava son akşam çalışmayın ya da çok az çalışın
  • sınavdan önce 1 günde 10 saat çalışmaktansa, 10 gün önce 1 er saat çalışın
  • bağımsız projeler geliştirin
  • kendinizi İHMAL ETMEYİN...