Verilen iki sayinin obeb ve okekini bulma

Kodla Büyü
C# ile buyrun. Gereksiz kısımlar silinebilir.
Kod:
int x = 12; // birinci sayı
int y = 18; // ikinci sayı

// dinamik dizi oluşturalım. Bölen sayısı kadar uzun olacak.
List<int> xBolenler = new List<int>();
List<int> yBolenler = new List<int>();

// birinci sayının (x) bölenlerini bulup diziye ekleyelim. Yarısına kadar baksak yeter
for (int i = 2; i <= x / 2; i++)
{
    if (x % i == 0)
    {
        xBolenler.Add(i);
    }
}
xBolenler.Add(x); // x sayının kendisi de bölendir onu da ekleyelim

// ikinci sayının (y) bölenlerini bulup diziye ekleyelim. Yarısına kadar baksak yeter
for (int i = 2; i <= y / 2; i++)
{
    if (y % i == 0)
    {
        yBolenler.Add(i);
    }
}
yBolenler.Add(y); // y sayının kendisi de bölendir onu da ekleyelim


Console.WriteLine("x = {0} sayısının bölenleri", x);
Console.WriteLine("------------------------------");
foreach (var item in xBolenler)
{
    Console.WriteLine(item);
}
Console.WriteLine();

Console.WriteLine("y = {0} sayısının bölenleri", y);
Console.WriteLine("------------------------------");
foreach (var item in yBolenler)
{
    Console.WriteLine(item);
}
Console.WriteLine();

//------------OBEB bulalım----------------
// her iki sayının bölenleri tek tek birbirleriyle karşılaştırılır.

int obeb = 1; // başlangıç olarak her sayının ortak böleni olan 1 atayalım

foreach (var xBolen in xBolenler)
{
    foreach (var yBolen in yBolenler)
    {
        if (xBolen == yBolen) // bölenler eşitse
        {
            if (xBolen > obeb) // bölenin son obeb'den büyük olması durumunda
            {
                obeb = xBolen; // yeni obeb o bölen olur
            }
        }
    }
}

Console.WriteLine("OBEB = {0}", obeb);

int okek = x * y / obeb; // okek iki sayının çarpımı obeb'e bölününce bulunuyor

Console.WriteLine("OKEK = {0}", okek);

Console.ReadKey();


Kodu biraz kısaltalım.

Kod:
int x = 12; // birinci sayı
int y = 18; // ikinci sayı

int kucuk = Math.Min(x, y); // küçük olan sayıyı bulur

int obeb = 1; // her sayının ortak böleni 1 atayalım

// küçük sayıya kadar döner
for (int i = 2; i <= kucuk; i++)
{
    if (x % i == 0 && y % i == 0)
    {
        obeb = i;
    }
}

Console.WriteLine("OBEB = {0}", obeb);

int okek = x * y / obeb; // okek iki sayının çarpımı obeb'e bölününce bulunuyor

Console.WriteLine("OKEK = {0}", okek);

Console.ReadKey();
 
Son düzenleme:
Python ile
Kod:
print("""
İKİ SAYININ EBOB VE EKOK'unu BULMA
-----------------------------------
Yapmak istediğiniz işlemi seçininz:
1- EBOB Bul
2- EKOK Bul
Çıkmak için 'q' yazınız.""")

def ebobbul(sayı1,sayı2):
    if sayı1 < sayı2:
        say = sayı1
    else:
        say = sayı2
    for i in range(1,say+1):
        if sayı1 % i == 0 and sayı2 % i == 0:
            ebob = i
    return ebob

def ekokbul(sayı1,sayı2):
    ekok = sayı2 * sayı1 // ebobbul(sayı1,sayı2)
    return ekok

while True:
    işlem = input("İşlem türünü seçiniz: ")
    if işlem == "q":
        print("Matematik atölyesine yine bekleriz...")
        break
    elif işlem == "1":
        sayı1 = int(input("1. Sayıyı giriniz: "))
        sayı2 = int(input("2. Sayıyı giriniz: "))
        print("{} ile {} sayısının EBOB'u {}".format(sayı1,sayı2,ebobbul(sayı1,sayı2)))
    elif işlem == "2":
        sayı1 = int(input("1. Sayıyı giriniz: "))
        sayı2 = int(input("2. Sayıyı giriniz: "))
        print("{} ile {} sayısının EKOK'u {}".format(sayı1,sayı2,ekokbul(sayı1,sayı2)))
 
Python ile
Kod:
print("""
İKİ SAYININ EBOB VE EKOK'unu BULMA
-----------------------------------
Yapmak istediğiniz işlemi seçininz:
1- EBOB Bul
2- EKOK Bul
Çıkmak için 'q' yazınız.""")

def ebobbul(sayı1,sayı2):
    if sayı1 < sayı2:
        say = sayı1
    else:
        say = sayı2
    for i in range(1,say+1):
        if sayı1 % i == 0 and sayı2 % i == 0:
            ebob = i
    return ebob

def ekokbul(sayı1,sayı2):
    ekok = sayı2 * sayı1 // ebobbul(sayı1,sayı2)
    return ekok

while True:
    işlem = input("İşlem türünü seçiniz: ")
    if işlem == "q":
        print("Matematik atölyesine yine bekleriz...")
        break
    elif işlem == "1":
        sayı1 = int(input("1. Sayıyı giriniz: "))
        sayı2 = int(input("2. Sayıyı giriniz: "))
        print("{} ile {} sayısının EBOB'u {}".format(sayı1,sayı2,ebobbul(sayı1,sayı2)))
    elif işlem == "2":
        sayı1 = int(input("1. Sayıyı giriniz: "))
        sayı2 = int(input("2. Sayıyı giriniz: "))
        print("{} ile {} sayısının EKOK'u {}".format(sayı1,sayı2,ekokbul(sayı1,sayı2)))
-ekok hatalı zira sayılar 6,9 olsun sen direkt cevap 54 diyorsun ama cevap 18, ebob da hatalı range başlangıç değeri 1 olursa sonuç sürekli 1 çıkar.
 
-ekok hatalı zira sayılar 6,9 olsun sen direkt cevap 54 diyorsun ama cevap 18, ebob da hatalı range başlangıç değeri 1 olursa sonuç sürekli 1 çıkar.
Hata yok hocam. Dikkatle bakarsanız.
ekok = sayı2 * sayı1 // ebobbul(sayı1,sayı2)
Burada sayıların çarpımını sayıların ebobuna bölerek ekokunu buluyor.
 
Kod:
fn obeb(a: i64, b: i64)->i64{
        let kucuk = if a>= b{ b }else{a};
        let buyuk = if a>= b{ a }else{b};
        let mut obeb = 1;
        if buyuk%kucuk ==0{
            return kucuk;
        }
        else{
            for i in (1..(kucuk/2+1) as i64).rev(){
                if     a % i == 0 && b % i ==0{
                    obeb = i;
                    break;
                }
            }
        }
        obeb
       
}

fn main(){
    let a = 54875;
    let b = 5632456;
    println!("obeb={}", obeb(a,b));
    println!("okek={}", a*b/obeb(a,b));
}

1'den başlayıp tüm sayılarda tek tek kontrol etmek, büyük sayılarda boşa zaman harcar. Verilen 2 sayıdan küçük olanı bulup, o sayıdan geriye doğru tek tek kontrol edip, her iki sayıyı da tam bölen bulduğunda hemen döngüyü sonlandırmak daha mantıklı gibi.

Not: Rust programlama dilinde yazıldı. Kod biraz daha değiştirildi. Küçük sayıdan itibaren kontrol etmeye gerek yok. Eğer küçük sayı büyük sayıyı tam bölmüyorsa, küçük sayının yarısından itibaren döngü başlatmak daha iyi olur.
 
Moderatör tarafında düzenlendi:
Bu soruyu sormak bir programlama meraklısı için hoş değil. Google elinizin altında.
 
Geri
Üst