Akademisyenler öncülüğünde matematik/fizik/bilgisayar bilimleri soru cevap platformu
2 beğenilme 0 beğenilmeme
2k kez görüntülendi
$a^2 + b^2 = c^2 $ eşitliğini sağlayan $a,b,c$ doğal sayılarına pisagor üçlüleri denir.

$a + b + c = 1000$ eşitliğini sağlayan tam olarak bir pisagor üçlüsü vardır. Buna göre $a \cdot b \cdot c$ çarpımının değerini bulunuz. (Bu pisagor üçlüsünü matematiksel olarak nasıl elde ederiz?)
Veri Bilimi kategorisinde (470 puan) tarafından  | 2k kez görüntülendi
`tam olarak bir' bilgisini de kullaniriz diye dusunmustum ama onu `biricik bir a.b.c var, haberiniz olsun' demek soylemis anladigim kadariyla.
aynen. biricik, bir tane var anlamında.

3 Cevaplar

7 beğenilme 0 beğenilmeme
En İyi Cevap

Bilgisayar kullanmazsak:

$a,b,c$  Pisagor uclusu oldugundan \[(a,b,c)=(s^2-t^2,2st,s^2+t^2)\] olacak sekilde $s>t$ pozitif tam sayilari vardir. Bu durumda \[1000=a+b+c=2s(s+t) \ \ \ \text{ yani } \ \ \ s(s+t)=500\] bulunur. $s>t$ oldugunu kullanirsak $t\le 15$ ve $s\ge 16$ bulunur. Dolayisiyla $s=20$ ve $t=5$ olmali. Bu durumda \[a\cdot b\cdot c =2st(s^4-t^4)=31875000\] olur.

Bilgisayar da kullanirsak:

print("Istenen sayi 31875000.")

 

(25.5k puan) tarafından 
tarafından seçilmiş
"Aşırı uygulamalı bilgisayar bilimi" kategorisi açılsın.
Makul bir teklif.
Eline sağlık Sercan, her zamanki gibi zekice bir çözüm. Ama soru bu değil ki! Nasıl ki lisans matematik sorusunun yanıtlarının mahiyetiyle orta öğretim sorularının yanıtlarının mahiyeti farklı oluyorsa, bu da Project Euler sorusu için yanıt değil bence.

Her şeyden önce 1000 sayısına bağımlı. Yazdığın denklemleri bilgisayara nasıl çözdüreceğin soru, insanların nasıl çözeceği değil.
Biliyorum. Zaten bu soruyu kod ile cozecekler de var. Ben kodsuz cozmus oldum.

Genel kod icin de bilgiler var cevapta. $a+b+c=n$ ise $n/2$ ozel bolenlerini arastiracaz. O bolenlerden $s$ ve $t$ degerleri icin $2st(s^4-t^4)$ hesaplanacak. Bu kismi gayet algoritmik.
Aslinda birisi bir baslik altinda bu projelere nasil yaklasmamiz gerektigini soylerse o da iyi olur.
PisagorUclusuBul(1000) deyince bana (a,b,c) degerlerini veren bir kod varsa bunu kullanmamaliyim herhalde. Yani kodlama ve matematik adina bazi kisitlamalar gerekiyor.

Amac en hizli kodu genel form icin yazmak mi?
Ya açıkçası ben de bu soruların nasıl çözmek gerektiğini bilmiyorum, genel bir ilkeden söz etmek istedim.
Ben bu cevabin en iyi cevap oldugu gorusundeyim sonucta bilgisayarin en az islem yaptigi cozum bu.

Bence amac gercekten sadece sorulari cozmek.

Bunu demisken bence her sorunun altinda genel sorunun cozumu icin bir algoritma ve bu algoritmanin asimptotik verimini inceleyen bir cevap olsa hos olurdu.

Bu sorulari takip ederek (simdiye kadar) python mathematica ve c dillerinin sentaksi ve ifade gucu hakkinda bilgi edinmek mumkun. O bakimdan programlama hakkinda pek bilmeyen ama ogrenmek isteyen matematikciler icin ideal.

Obur yandan bu cevap ve buna benzeyen cevaplar ise benim gibi cok da matematikten anlamayan ama azicik programlama bilen insanlar icin ufuk acici. O yuzden bence iyi bir formatta gidiyoruz
2 beğenilme 0 beğenilmeme

Mathematica ile cozum:

Times @@ First@ Values@Solve[{a^2 + b^2 == c^2, a + b + c == 1000}, {a, b, c}, PositiveIntegers]

31875000

Veya

Times @@@ Values@FindInstance[{a^2 + b^2 == c^2, a + b + c == 1000}, {a, b, c}, PositiveIntegers]

{31875000}

 

(2.9k puan) tarafından 
Ökkeş hocam biraz mathematica syntaxı anlatan sorular çözer misiniz? Biraz öğreniriz.
Guzel olur aslinda ama video olmadan anlatmak biraz zor gibi ve YouTuber olmak icin henuz hazir degilim :)

Hocam @ operatoru ne ise yariyor ?

$f[x]=f@x$ kisayol, yani bir arguman varsa $f[x]$ yerine $f@x$ kullanabilirsin.

Range[10]=Range@10 ikisi de $\{1,2,3,4,5,6,7,8,9,10\}$ ciktisini verir.

Cos[Sin[10]]=Cos@Sin@10
0 beğenilme 0 beğenilmeme

Python ile çözümü şöyledir:

 

n = int(input("Üçgenin çevresi olan tam sayıyı giriniz:\n"))
for a in range(1,n//2):
  for b in range(1,a):
    c = n - (a+b)
    if c**2 == a**2 + b**2:
      print("Pisagor üçlüsü {},{},{} sayılarıdır.".format(a,b,c))
      print("İstenen çarpım {} olur.".format(a*b*c))

 

Kodu çalıştıdığınızda $n$ için bir sayısı girmeniz istenecek. Üçgenin çevresini belirten bu değere $1000$ yazdığınızda çıktımız şöyle görünür:

Pisagor üçlüsü $375, 200, 425$ sayılarıdır.

İstenen çarpım $31875000$ olur.

 

Not: $n=1000$ için bu kodun çalışma süresi ortalama 3.4 sn'dir. 

(2.6k puan) tarafından 
20,281 soru
21,819 cevap
73,492 yorum
2,504,104 kullanıcı