Mükemmel sayı bulmak vs. gibi kodlar bana çok uydurma geliyor

Mükemmel sayı : Kendisi hariç pozitif tam bölenlerinin toplamı kendisine eşit olan sayı. Bölenlerin toplamı / 2 diyerek de bu sayıya ulaşabiliyoruz.

Bunun kodu için ise şöyle bir kod yazılmış ama bu ve buna benzer kodlar bana çok uydurma geliyor. 9 ve 10. sınıf matematiğinde sayılar ünitesi gibi ünitelerde bazen uydurup uydurup cevabı bulursunuz ya bunlar da bana öyle geliyor. Bunu yapacak olsam kesinlikle aklıma gelmez ki gelmedi de zaten. Bunu daha oturaklı bir zemine oturtabilmeme yardım edebilir misiniz ?

sayı = int(input("Sayı:"))

i = 1
toplam = 0
while (i < sayı):
    if (sayı % i == 0):
        toplam += i
    i += 1

if (toplam == sayı):
    print(sayı,"mükemmel bir sayıdır.")
else:
    print(sayı,"mükemmel bir sayı değildir.")
1 Beğeni

Google: Perfect numbers…

What Are Perfect Numbers? Definition, List, Formula, Examples (splashlearn.com)

image

Formülden çıkan sayı asal sayıysa mükemmel sayıymış.

Bizi forumda asal bulmak için karekök yaklaşımı ile ilgili bir yöntem var onu da kullanırsanız 9. ve 10.sınıf matematiğinde sayılar ünitesi gibi uydurup uydurup bulmamış mı olursunuz bilemedim.

Fastest Algorithm to Find Prime Numbers | Baeldung on Computer Science

1 Beğeni

“Uydurma” (?) ve belki de rahatsız edici gelmesinin sebebi imperatif kodla yazılması ve bunun kodu okumayı zorlaştırması olabilir.
Bu nasıl?

def is_perfect(num):
    divisors = list(filter(lambda x: num % x == 0, range(1, num)))
    divisor_sum = sum(divisors)
    return num == divisor_sum


if __name__ == '__main__':
    number = int(input("Enter number: "))
    perfect = is_perfect(number)
    if perfect:
        print("Mükemmel sayı")
    else:
        print("Mükemmel sayı değil.")
1 Beğeni

Aslında programlama da biraz böyle bir şey. Bazen tek tek yerine koyup kontrol edersiniz. Yani sizin deyiminizle uydurup uydurup çıkan sonuca bakarız. :slight_smile:

1 Beğeni

Daha fonksiyonlara gelmedim o yüzden pek anlamadım ama elinize sağlık :slight_smile:

Bu konudan aşırı bunaldım sanırım, baksam da bu formülü nasıl uyglayacağımı çözemedim.

Burada range(1, num) ifadesini range(1, num // 2 + 1) olarak değiştirirsek, sorgulanması gerekmeyen x değerlerini elemiş oluruz. Çünkü n hariç n’i tam bölen en yüksek tamsayı en fazla n / 2 olabilir.

1 Beğeni

Uydurmadan kasit nedir?
Birinin aklinda uretip yazdigi bir kod, evet. Dogada bir benzeri yok. (Cogu kodun olmadigi gibi)

“Ahmet’in 3 kalemi var, Mehmet’in iki kati kalemi varsa toplam kac kalemleri var” gibi mi?
Yoksa butun matematigin uydurma olmasi—dogada hic bir yerde carpma islemini veya 4 sayisini bulamayacagin gibi mi?

Neyi yapacak olsaniz, ne akliniza gelmez? Verilen bir sayinin mukemmel sayi olup olmadigina bakacak olsaniz, yukaridaki kod mu akliniza gelmez?

Gelmesi lazim. Buna “program yazmak” diyoruz. Ogretim surecinin kazandirmayi amacladigi beceri.

Hmm? Nasil bir zeminden bahsediyoruz?

Matematik ve matematik temelli her sey uydurmadir; gerceklik hakkinda bir takim farazi durumlari hesaplamak veya olasiliklarla ilgili sorulari cevaplamak icin kullaniriz. Programlama da insanustu hizda matematik islemleri yapan bilgisayarlari alete donusturmek, bu islerde yardimci hale getirmek icin yaptigimiz bir meta-istir. Bu tur ezgersiz sorulari, turlu programlama becerilerini kazandirmak veya kazanilmis seyleri pekistirme amacina sahiptirler. Ogrenilmekte olan bir dilde yapilan, gercegi yansitmayan konusmalara benzetilebilirler.

1 Beğeni

En akıllısı sensin hocam. Bilgi kirliliği diye buna diyoruz işte. Yorumun için çok teşekkürler

Cocugum, kendini ifade etmeyi becerememissin. Soyut bilimsel kavrama “uydurma” diyip ne yapmaya calisiyorsun, anlayamadik ki? Dert yanacagin sira arkadasin degiliz biz, burada omrunu soyut kavramlari calismaya, yenilerini uretmeye harcayan insanlar var.

Ciddiye alip cevap verende kabahat.

3 Beğeni

Bu konulardan bunalmanız normal. Bu tür sorular normalde uzman yazılımcıların uğraştığı konular değil. Bunlar tamamen egzersiz. Karar yapılarını , döngüleri, değişkenleri kullanmayı kavrayabilin diye basit uygulamalar.

Alfabe öğrenmek gibi düşünün harfleri öğrenme aşamasındasınız. Şiir yazdırmak yerine Ali ata bak yazdırıyorlar. (Bizim zamanımızda böyleydi okuma fişleri kalktı sanırım.)

Ha ben bunları yapmadan ilerden başlarım derseniz siz bilirsiniz. Ama alfabesini bilmediğiniz bir metni okuyamasınız. Okudunuz diyelim anlamazsınız.

Anladınız diyelim, şiirini yazamaz edebiyatını yapamazsınız. Bu aşamada sıkılmak sizi zaten ilerde çok da başarılı olacak hevese sahip olmadığnızın göstergesi. Programlama, sabır, tekrar, hata , kan ve göz yaşı demek.

İlerde kodlamada profesyonelleştiğinizde daha karmaşık kodlar yazmayacaksınız. İyi bir programcı sorunu daha basite indirgemeye çalışır ve daha sade kodlar yazmaya çalışır.

Asıl meydan okuma sadeleştirmededir. Zaten zor olanı da budur.

Bu iyi bir çalışmadır. Öncelikle öğrendiğiniz dilin matematiksel formüllerini kodlamayı araştırın böylece, matematiksel notasyonla kodlarınızı bağdaştırırsınız.

Size verdiğim kısımla ilgili forumda asal sayı bulma kodları çokça var.

Yani sayı 2n-1 sayısı asal bir sayı ise, 2^(n-1) *(2^n-1) bir perfect number dır.

Bu tür egzersizleri saçma bulmayarak çalışmanız ilerideki programlama geleceğinizde oldukça işe yaracaktır.

1 Beğeni