Python Örnekleri Asal Sayı Bulucu

0 199

Python daha önce en iyi programlama dillerinin sıralandığı listemizde 1. sırada yer almıştı. Sitemizde Python örnekleri son yılların en popüler dili olan Python öğrenmek ve kendini geliştirmek isteyenler için sitemizde yer alacaktır. 2 yıldır Lise düzeyinde Python dersleri verdiğimden elimde oldukça fazla kaynak ve örnek birikti bunları yeri geldikçe sitemizde paylaşacağım. Bu yüzden sitemizi takip etmeyi bırakmayın.

İlk Python kod örneğimiz asal sayı bulma ile ilgili olacak. Asal sayılar, sadece iki pozitif tam sayı böleni olan doğal sayılardır. Sadece kendisine ve 1 sayısına bölünebilen 1’den büyük pozitif tam sayılardır. Öklid’den beri asal sayıların sonsuz olduğu kabul edilir. Bu örnekler aslında project Euler isimli büyüleyici matematik dünyasına ilgi duyan herkesin becerilerini ve zevklerini teşvik etmek, meydan okumak ve geliştirmek için var olan bir sitede olan iki problemin çözümü olarak hazırlanan kodlar.

Normalde bir sayının asal olup olmadığını bulmak için o sayıyı o sayıdan küçük olan tüm sayılara bölmek gerekir. Ancak Project Euler‘de 7. soru 10001. asal sayıyı bulun. Normal yollarla 10001 tane asal sayı bulmak orta hızdaki bir bilgisayar için saatler alacak bir işlemdir. Bu problemi saniyeler içerisinde halledebilen bir yöntem paylaşıyorum.

Project Euler

Yöntemi kısaca anlatacak olursak :

  1. İstenilen n sayısı büyüklüğünde her elemanı true olan bir dizi oluşturuyoruz [true, true, true,…] gibi.
  2. En küçük asal sayı olan 2 den başlayan bir while döngüsü başlatacağız. p =2
  3. Döngümüz p sayısının karesi n den küçük olduğu sürece devam edecek
  4. Eğer sayının karşılığı dizi içinde true ise asal olup olmadığını kontrol ediyoruz
  5. Eğer sayı asal değilse sayının ve sayının katlarını dizi içindeki yerlerini false yapıyoruz bu sayede tekrar aynı sayıları kontrol etmeyeceğiz

Python Örnekleri Asal Sayı Bulucu Kodlar

Yazdığımız kodun temel algoritması bu kadar. Alttaki örnek 10001. asal sayının ne olduğunu gösterecek ve bunu saniyeler içinde tamamlayacak olan kod:

#asal sayı bulma fonksiyonu
#10001 . ci asal sayi :  104743

def asalSayiBul(n): #n sayisina kadar olan asal sayıları bulur
    k=0
    asalSayilar = [True for i in range(n+1)] # istenilen n sayısı büyüklüğünde her elemanı true olan bir dizi oluşturuyoruz
    # örnek n = 10  için [True,True,True,True,True,True,True,True,True,True] gibi
    
    p=2 #en küçük asal sayı 2 den başlıyoruz
    while(p*p <=n): # p sayısının karesi n den küçük  olduğu sürece devam edecek
        
        if(asalSayilar[p]==True): # Eğer sayının karşılığı dizi içinde true ise asal olup olmadığını kontrol ediyoruz
            
            for i in range(p*2,n+1,p): 
                asalSayilar[i]= False #eğer sayı asal değilse sayıyı ve sayının katlarını dizi içindeki yerlerini false yapıyoruz bu sayede tekrar aynı sayıları kontrol etmeyeceğiz
                
        p+=1
        
    for p in range(2,n):
        if asalSayilar[p]:
            k+=1
            if (k==10001):
                print(k,". ci asal sayi : ", p)
            
            
asalSayiBul(1000000)

Alttaki kodumuzda 2 milyona kadar olan asal sayıların toplamlarını bulan kod örneğimiz.

#asal sayı bulma fonksiyonu

def asalSayiBul(n): #n sayisina kadar olan asal sayıları bulur
    k=0
    topla = 0
    asalSayilar = [True for i in range(n+1)] # istenilen n sayısı büyüklüğünde her elemanı true olan bir dizi oluşturuyoruz
    # örnek n = 10  için [True,True,True,True,True,True,True,True,True,True] gibi
    
    p=2 #en küçük asal sayı 2 den başlıyoruz
    while(p*p <=n): # p sayısının karesi n den küçük  olduğu sürece devam edecek
                                                                                                                                                                                  
        if(asalSayilar[p]==True): # Eğer sayının karşılığı dizi içinde true ise asal olup olmadığını kontrol ediyoruz
            
            for i in range(p*2,n+1,p): 
                asalSayilar[i]= False #eğer sayı asal değilse sayısı ve sayının katlarını dizi içindeki yerlerini false yapıyoruz bu sayede tekrar aynı sayıları kontrol etmeyeceğiz
                
        p+=1
        
    for p in range(2,n):
        if asalSayilar[p]:
            k+=1
            topla = topla + p
    return topla
            
            
print("toplam : " , asalSayiBul(2000000))

Daha fazla python örnekleri ile ilgili makeleler ve Python Derslerimiz için sitemizi takip edebilirsiniz ve bu yazıyı Facebook’ta paylaşmayı unutmayın.

Cevap bırakın

E-posta hesabınız yayımlanmayacak.

Bu web sitesi deneyiminizi geliştirmek için çerezleri kullanır. Bununla iyi olduğunuzu varsayacağız, ancak isterseniz vazgeçebilirsiniz. Kabul etmek Mesajları Oku