Girilen İki Sayının Asal Bölenlerini EKOK Bulma

Daha önceki bir yazımızda girilen iki sayının EBOB ve EKOK’unu bulma yöntemini yazmıştık. Orada önce EBOB (En Büyük Ortak Bölen) bulunuyor ve çıkan sonuca göre girilen sayıların EKOK (En küçük Ortak Kat) değeri sayıları birbirine çarpıp EBOB değerine bölünmesiyle bulunuyordu. bu yazımızda ise girilen iki sayının EKOK değerini farklı bir yöntemle bulacağız. Girilen sayıların ortak asal bölenlerini bulacağız.

Sitemizde farklı algoritma sorularına, python a yeni başlayanlar için kolaylıkla çözebilecekleri sorulara linklerden ulaşabilirsiniz.

Bunun için önce bir sayının asal olup olmadığını anlamak amacıyla bir asal bulma fonksiyonu yazıyoruz.

Asal Sayı Bulma Fonksiyonu

def asal(a):
    if a == 1 :
        return False
    elif a == 2 or a==3 or a==5 or a==7: #Daha az işlemle asal sayıyı bulmak için belli sayıları True döndürüyoruz
        return True
    elif a%2== 0 or a%3==0 or a%5==0 or a%7==0: #İşlemleri hafifletmek için tüm çift sayıları, 3,5 ve 7 nin katlarını False döndürüyoruz
        return False
    else:
        for i in range(3,a): #3 ten başlayarak sayının kendisine kadar olan tüm sayılara bölünüp bölünmediğini kontrol ediyoruz.
            if a%i==0:
                return False
    return True

 

Bu fonksiyon basit olarak bir sayının asal olup olmadığını bize söyleyecektir. Bu fonksiyonun büyük sayılar için çok daha hızlı bir versiyonunu daha önce asal sayı bulma yazımızda yazmıştık. isterseniz oradaki yöntemleri kullanarak çok çok büyük sayılarda da çalışabilecek bir biçimde bu uygulamayı geliştirebilirsiniz.

Girilen iki sayının asal bölenlerini ise bulmak için bir while döngüsü kullandık. Her turda sayıları küçülterek ve sayacı baştan başlatarak sonuca ulaşmaya çalıştık.

sayi1 = int(input("Birinci Sayıyı Giriniz")) #ekok bulmak için iki sayı girmesini istiyoruz.
sayi2 = int(input("İkinci Sayıyı Giriniz"))
bolenler = []
if sayi1 > sayi2: #Döngüyü büyük olan sayıya kadar yapabilmek için girilen sayılardan büyük olanı buluyoruz.
    buyuksayi = sayi1
else:
    buyuksayi = sayi2
i=1
while i<=buyuksayi: #Bölenleri bulmak için büyük sayıya kadar bir döngü oluşturduk
    i+=1
    if asal(i):
        if (sayi1 % i == 0) and (sayi2 % i==0):
            bolenler.append(i)
            sayi1= sayi1//i
            sayi2= sayi2//i
            i=1 #saylar i sayısına bölünürse tekrar döngüyü 1 den başlatacağız.
        elif sayi1 % i ==0:
            bolenler.append(i)
            sayi1= sayi1//i
            i=1
        elif sayi2 % i ==0:
            bolenler.append(i)
            sayi2= sayi2//i
            i=1
print(bolenler)
ekok=1
for i in bolenler:
    ekok = ekok * i 
print(sayi1, "ve", sayi2, "sayılarının EKOK'u = ", ekok)

 

Algoritma açısından çok başarılı bir kodlama değil ancak yeni başlayanlar için anlaşılır bir kod oldu. İstenirse bu yöntemi geliştirebilie ve daha hızlı bir çözüm elde edebilirsiniz. Yorumlarda sizlerden de bu uygulama hakkındaki fikirlerinizi bekliyorum.

Girilen İki Sayının asal bölenlerini EKOK Bulma kodunun tamamı

def asal(a):
    if a == 1 :
        return False
    elif a == 2 or a==3 or a==5 or a==7: #Daha az işlemle asal sayıyı bulmak için belli sayıları True döndürüyoruz
        return True
    elif a%2== 0 or a%3==0 or a%5==0 or a%7==0: #İşlemleri hafifletmek için tüm çift sayıları, 3,5 ve 7 nin katlarını False döndürüyoruz
        return False
    else:
        for i in range(3,a): #3 ten başlayarak sayının kendisine kadar olan tüm sayılara bölünüp bölünmediğini kontrol ediyoruz.
            if a%i==0:
                return False
    return True
sayi1 = int(input("Birinci Sayıyı Giriniz")) #ekok bulmak için iki sayı girmesini istiyoruz.
sayi2 = int(input("İkinci Sayıyı Giriniz"))
bolenler = []
if sayi1 > sayi2: #Döngüyü büyük olan sayıya kadar yapabilmek için girilen sayılardan büyük olanı buluyoruz.
    buyuksayi = sayi1
else:
    buyuksayi = sayi2
i=1
while i<=buyuksayi: #Bölenleri bulmak için büyük sayıya kadar bir döngü oluşturduk
    i+=1
    if asal(i):
        if (sayi1 % i == 0) and (sayi2 % i==0):
            bolenler.append(i)
            sayi1= sayi1//i
            sayi2= sayi2//i
            i=1 #saylar i sayısına bölünürse tekrar döngüyü 1 den başlatacağız.
        elif sayi1 % i ==0:
            bolenler.append(i)
            sayi1= sayi1//i
            i=1
        elif sayi2 % i ==0:
            bolenler.append(i)
            sayi2= sayi2//i
            i=1
print(bolenler)
ekok=1
for i in bolenler:
    ekok = ekok * i 
print(sayi1, "ve", sayi2, "sayılarının EKOK'u = ", ekok)

Daha önce yazdığımız EBOB bularak Ekok bulma yönteminin kodları ve akış şeması:

Ebob Ekok Bulan Program Akış Şeması
sayi1 = int(input("Birinci Sayıyı Giriniz : "))
sayi2 = int(input("İkinci Sayıyı Giriniz : "))
if (sayi1>sayi2):
    kucuksayi = sayi2
else:
    kucuksayi = sayi1
for i in range(1,kucuksayi+1):
    if (sayi1 % i==0) and (sayi2%i ==0):
        ebob = i
print("Ebob = ",ebob)
print("Ekok = ", (sayi1*sayi2)//ebob)

 

algoritmaebobekokpyton
Comments (0)
Add Comment