Java Obeb ve Okek Hesaplama

By Burak TUNGUT - 21.11.2012 - Kategori Java

Bu makalem de Java ile girilen iki sayının obeb ve okek değerlerini hesaplayan methodları yazacağız.

En büyük ortak bölen ve en küçük ortak katları yani EBOB (obeb) ile EKOK (okek) değerlerinin nasıl bulunacağını kavradıktan sonra bunları Java ile methodlara dökeceğiz.
 

Obeb ve Okek Hesaplama

Bir önceki makalem de heximal dönüşümü anlatmıştım. Tıpkı ordaki taban aritmatiği konuları gibi obeb ve okek konularını da mutlaka matematik derslerimizden hatırlarız. Açıkçası ne ilkokuldayken ne de lisedeyken bu konuyu sevmezdim çünkü gelen soruların hiç birinde bunu obeb yada okek ile çözeceğiniz söylenmediği gibi bunu bulmak için bazen çok komplex düşünmekde gerekebilirdi smiley

Genel olarak hatırlayacak olursak iki sayıyıda bir kağıda yazar yanına uzun bir çizgi çektikten sonra her iki sayının da bölüneceği sayıları bulup bölümlerine bakar ve katlarını sağ tarafa yazardık. Her ikisinin bölündüklerinin çarpımı bize obeb'i, hepsinin çarpımı ise bize okek değerini verirdi.

Bu olayı kodlara dökecek olursak ; okek bulurken her iki sayıyıda 2 den başlamak üzere bu sayının hesaplanacak diğer iki sayının bölümüne bakacağız ve her ikisinin de ortak olarak bölündüğü en küçük sayıyı bulmaya çalışacağız.

Obeb hesaplamasında ise büyük olan sayıyı kendisine ve diğer sayının bölümünden kalanına bakarız, büyük sayıyı birer birer azaltmak koşuluyla her ikisininde ortak olarak bölündüğü bu sayıda bize obeb değerini verecektir.

Başka sitelerde alakasız kodlar bulabilirsiniz, algoritma karmaşıklığı hakkında pek hesaplama yapmasam da verimsiz bir algoritma olduğu söylenemez!
 

Kolay bir yol

Aslında her iki değeride hesaplayan bir method yazmaktansa sadece okek ya da sadece obeb hesaplayan bir method yazarak diğer değeri aşağıda ki formülden hesaplayabilirsiniz.
Hatırlayın ki; a ve b iki doğal sayı olmak üzere --> a*b = ebob(a,b) * ekok(a,b) 'dir.
 

Kodlarımız

public int bulOkek(int pSayi1, int pSayi2)
	{
		int say = 2;
		int sonuc;
		while(true)
		{
			if((say % pSayi1 == 0)&&(say % pSayi2 == 0))
			{
				sonuc = say;
				break;
			}
			say++;
		}
		return sonuc;
	}
	
	public int bulObeb(int pSayi1, int pSayi2)
	{
		int say;
		int sonuc;
		if(pSayi1>pSayi2)
			say=pSayi1;
			else
			say=pSayi2;
		while(true)
		{
			if((pSayi1 % say == 0)&&(pSayi2 % say == 0))
			{
				sonuc = say;
				break;
			}
			say--;
		}
		return sonuc;
	}
Yorum Bırak

Twitter
Facebook