Yorumları: 231
Konuları: 12
Kayıt Tarihi: 06-07-2018
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 1.178
Programcı
Döngü ile tek tek yapılırsa işlemlerin çoğu gereksiz oluyor. Zaten yukarıda yapılan işlemi tekrar yapıp vakit kaybetmiş oluruz.
a^8 için;
a
a*a
a*a*a
a*a*a*a
a*a*a*a*a
a*a*a*a*a*a
a*a*a*a*a*a*a
a*a*a*a*a*a*a*a
...
yerine
a^1 = a
a^2 = a*a (b)
a^4 = b*b ©
a^8 = c*c
...
En sonunda bu işlemi genelleştirmek gerekiyor.
Yorumları: 231
Konuları: 12
Kayıt Tarihi: 06-07-2018
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 1.178
Programcı
Aslında siteye girmeye pek fırsatım olmadığı için detaylı yazamadım. Şimdi çözümü ve Delphi ile ilgisini yazayım.
TABAN^ÜS değerini en kısa yolsan hesaplamak için ÜS değeri 2'lik düzende yazılır.
Yaklaşık 15-20 kadar işlemde sonucu hesaplayabiliriz.
3^5000 = ?
5000 = (1001110001000)2 = 2^12 + 2^9 + 2^8 + 2^7 + 2^3
3^5000 = 3^(2^12) * 3^(2^9) * 3^(2^8) * 3^(2^7) * 3^(2^3)
Polinom şeklinde ifade edeceğiz. Her aşamada bir önceki hesaplanmış sonucun karesini kullanacağız.
3^(2^0) = 3
3^(2^1) = 3^2 (Her aşamada bir öncekinin karesi ...)
3^(2^2) = (3^2)^2
3^(2^3) = ((3^2)^2)^2
3^(2^4) = ...
3^(2^5) = ...
3^(2^6) = ...
3^(2^7) = ...
3^(2^8) = ...
3^(2^9) = ...
3^(2^10) = ...
3^(2^11) = ...
3^(2^12) = ...
12'ye kadar her seferinde bir öncekinin karesini hesapladıktan sonra, polinomdaki gerekli kısımları seçip birbiri ile çarpıyoruz.
3^5000 => Dizinin 3,7,8,9,12'inci elemanlarının çarpımıdır.
Böylece bir sayının 5000. üssünü toplam 12+5 çarpma işlemiyle bulmuş olduk.
Yıllar önce üniversitede okurken güya keşif yaptığımı zannedip boğaziçi mühendislikte okuyan bir arkadaşa gösterdiğimde, biz bunu zaten görmüştük, ama üssü ikilik değil, karekökün karekökü diye alarak yapıyorduk demişti. Sonradan baktım iki yöntem de bazen birkaç farkla birbirini geçebiliyor.
Algoritmayı optimize edip C koduna çevirmiştim ve C'nin üs işleminden daha hızlı sonuç veriyordu.
Ama asıl hayal kırıklığını Delphi nasıl yapmış diye baktığımda yaşamıştım. Delphi'nin tamsayı üs alma fonksiyonu bile bu yöntemi kullanmış meğer.
Yorumları: 1.460
Konuları: 80
Kayıt Tarihi: 05-08-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 11.868
Üstad
Ellerinize sağlık.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
Yorumları: 858
Konuları: 35
Kayıt Tarihi: 12-08-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 3.731
Uzman
Programlama ile uğraşmak insanın matematiği sevmesini ve ufkunu açmasını sağlıyor.
Elinize sağlık çok güzel bir çözümmüş.