Soru
Pisagor üçlüsü a < b < c ve a^2 + b^2 = c^2 olarak tanımlanabilir.
Örneğin: 3^2 + 4^2 = 9 + 16 = 25 = 5^2.
a + b + c = 1000 sonucunu veren, yukarıdaki kurala uyan yalnızca 1 adet pisagor üçlüsü vardır. Bu üçlü için a*b*c nedir?
Çözüm
Denklemi biraz basite indirgersek olay daha basit bir hal alacak gibi görünüyor. İç içe 3 adet for döngüsü kullanarak kaba kuvvet(brute force) ile de çözebiliriz. Fakat her ne kadar bu soru için gerekmese de, biraz daha hız kazandırmakta fayda var.
Denklemi açalım
a + b + c = 1000 ise
c = 1000 - a - b
c^2=(1000-a-b)^2
Buradan denklemi açtığımızda
1000a + 1000b - ab = 500000 çıkıyor. Denklemi iki bilinmeyene indirgedik. Bir for döngüsünden kurtulduk.
Bunu Mathematica yazılımıyla tek satırda çözmek mümkün, fakat ben bunu hile yapmak olarak görüyorum. Çünkü bu durumda biz bir şey yapmamış oluyoruz, program kendisi çözüyor. Yine de çözüm şu şekilde:
1000a+1000b-ab=5000 && a>0 && b>0
veya
a+b+c=1000 && a^2+b^2=c^2 && a>0 && b>0 && c>0
Kodlama
// 1000a + 1000b - ab = 500000
bool found = false;
int a = 0, b = 0;
for (a = 0; a < 500; a++)
{
for (b = 0; b < 500; b++)
{
if (1000 * a + 1000 * b - a * b == 500000)
{
found = true;
break;
}
}
if (found)
break;
}
Cevap : a=200, b=375 ve c=425 ---> a*b*c = 31875000
Çözüm 0ms sürdü.
Hiç yorum yok:
Yorum Gönder