Algoritmalar · 82 satır
Asal eleği
Eratosthenes eleği: 120 sayılık ızgarada asal olmayanlar tur tur söner.
Önizleme · 0.6.0 — dil 1.0 öncesidir; sözdizimi ve kütüphane değişebilir. Buradaki her örnek derlenerek sınanır.
Çalıştırın
Uçbirim
kabalang calistir 04_asal_elek.kblKaynak kod
04_asal_elek.kbl
# ╔═══════════════════════════════════════════════════════════════════╗
# ║ ERATOSTHENES ELEĞİ — asal olmayanları eleyerek asalları bul ║
# ║ Her tur bir asalın katlarını söndürür; ızgara canlı güncellenir. ║
# ╚═══════════════════════════════════════════════════════════════════╝
kullan kaba.sistem
SINIR = 120
fonksiyon renkli(yazi: metin, renk: sayi):
don "\033[38;5;" + metin(renk) + "m" + yazi + "\033[0m"
fonksiyon ekrani_temizle():
yazdir("\033[H\033[2J")
fonksiyon izgarayi_ciz(elek, aktif: sayi, elenen: sayi):
ekrani_temizle()
yazdir("")
yazdir(renkli(" ERATOSTHENES ELEĞİ — 2'den " + metin(SINIR) + "'e", 81))
yazdir(renkli(" " + "─".tekrarla(62), 238))
satir = " "
sutun = 0
i = 2
iken i <= SINIR:
kutu = metin(i)
eger i < 10:
kutu = " " + kutu
degilse:
eger i < 100:
kutu = " " + kutu
eger elek[i] == 0:
satir = satir + renkli(kutu + " ", 236)
degilse:
eger i == aktif:
satir = satir + renkli(kutu + " ", 220)
degilse:
satir = satir + renkli(kutu + " ", 78)
sutun = sutun + 1
eger sutun == 15:
yazdir(satir)
satir = " "
sutun = 0
i = i + 1
eger sutun > 0:
yazdir(satir)
yazdir(renkli(" " + "─".tekrarla(62), 238))
yazdir(renkli(" elenen: " + metin(elenen) + " şu an eleyen asal: " + metin(aktif), 245))
uyu(420)
# ── Elek ──────────────────────────────────────────────────────────────
# 1 = hâlâ aday, 0 = elendi. Bir asalın katları asal olamaz.
elek = []
i = 0
iken i <= SINIR:
elek.ekle(1)
i = i + 1
elenen = 0
p = 2
iken p * p <= SINIR:
eger elek[p] == 1:
kat = p * p
iken kat <= SINIR:
eger elek[kat] == 1:
elek[kat] = 0
elenen = elenen + 1
kat = kat + p
izgarayi_ciz(elek, p, elenen)
p = p + 1
izgarayi_ciz(elek, 0, elenen)
asallar = 0
i = 2
iken i <= SINIR:
eger elek[i] == 1:
asallar = asallar + 1
i = i + 1
yazdir("")
yazdir(renkli(" ✓ " + metin(SINIR - 1) + " sayıdan " + metin(elenen) + " tanesi elendi, " + metin(asallar) + " asal kaldı.", 78))
yazdir(renkli(" Eleme yalnız p*p'den başlar: küçük katlar zaten elenmiştir.", 245))
yazdir("")