Bu kodlar nasıl çalışıyor(?

Forumda gezerken şu iki kodu gördüm. Ama nasıl çalıştıklarını tam olarak anlamadım. Kodlar şunlar:

Asal çarpan bulma programı:

asal_mı = lambda x: [False for i in range(2,x-1) if x % i == 0] 
asallari_bul = lambda x: [i for i in range(2, x+1) if (x %i==0 and asal_mı(i)==[])]
a = [print(i) for i in asallari_bul(int(input("Sayıyı giriniz: ")))]

Asal sayı bulma programı:

[i for i in range(2, int(input('Bir sayi girin: '))-1) if not [a for a in range(2, i-1) if i%a==0]]

Verimsiz bir sekilde. :slight_smile:


Bir sayinin asal olup olmadigini anlamak icin 2’den karekokune kadar olan carpanlarina bakmak yetiyor. Oncelikle potansiyel carpanlari uretelim:

potansiyel_carpanlar = lambda n: range(2, math.floor(math.sqrt(n)) + 1)

Sonra bunlarin arasindan gercek carpanlari, sayiyi tam bolenleri bulalim:

potcarp = potansiyel_carpanlar
gercek_carpanlar = lambda n: filter(lambda pc: n % pc == 0, potcarp(n))

veya

potcarp = potansiyel_carpanlar
gercek_carpanlar = lambda n: [pc for pc in potcarp(n) if n % pc == 0]

Bu sekilde “gercek carpani” olan bir sayi asal degil:

asal_mi = lambda n: not any(gercek_carpanlar(n))

Bir takim asallar:

bazi_asallar = filter(asal_mi, range(2, 100))

veya

bazi_asallar = [n for n in range(2, 100) if asal_mi(n)]

Son ifadeden baslayip, degiskenleri kesip yerlerine tanimlarini yapistirirsan tek basina calisan bir ifade elde edebilirsin.

(lambda x: hede(x))(n) de hede(n)'ye indirgenebiliyor. (β-reduction)

1 Beğeni

Cevabınız için teşekkür ederim.