KABAFORCEGeliştirici KabaOS'u edinin

Liste ve dizi

Eratosthenes eleği

500.000'e kadar asal sayılar Eratosthenes eleğiyle bulunur ve sayılır. Büyük bir listede ardışık ve atlamalı okuma/yazmayı ölçer.

Bu sayfayı KabaLang ile yazılmış sunucu sundu.

Canlı ölçüm

Bu testi kendi bilgisayarınızda ölçün

Eratosthenes eleği tarayıcınızda, WebAssembly ile koşar: KabaLang, C++, JavaScript ve Python. Ölçüm sayfası bu testi seçili açar; sonuçlar cihazınızda kalır.

Bu testi canlı ölç

Eratosthenes eleği

C++'tan 1,31 kat hızlı

500.000'e kadar asallar · liste erişimi. Çubuk uzunsa daha hızlı.

DilReferans
KabaLang
0,89 ms
C++
1,2 msKabaLang 1,31 kat hızlı
Python
46,3 msKabaLang 52 kat hızlı
DilEn iyiOrtalamaDerlemeİkili boyutu
KabaLang0,89 ms0,96 ms687 ms987 KB
C++1,2 ms1,4 ms288 ms16 KB
Python46,3 ms50,0 ms––

Referans ölçüm: 21 Ekim 2026 14:53 · 11th Gen Intel(R) Core(TM) i7-11370H @ 3.30GHz · KabaLang 0.6.0 (94109b3+) · süreler milisaniye; ısınma koşusundan sonra 10 koşunun en iyisi.

Bu testte KabaLang / C++ oranı, zaman içinde

Eratosthenes eleği: KabaLang / C++ süre oranı0,50×0,75×1,00×1,25×20 Ekim 2026 21:18 · KabaLang 0.6.0 (b0e9258) · 0,90 / 1,10 msb0e925821 Ekim 2026 05:21 · KabaLang 0.6.0 (e4756c0) · 0,93 / 1,30 ms21 Ekim 2026 06:07 · KabaLang 0.6.0 (94109b3+) · 0,89 / 1,27 ms21 Ekim 2026 06:13 · KabaLang 0.6.0 (94109b3+) · 0,89 / 1,29 ms21 Ekim 2026 07:18 · KabaLang 0.6.0 (94109b3+) · 0,94 / 1,28 ms21 Ekim 2026 14:53 · KabaLang 0.6.0 (94109b3+) · 0,89 / 1,17 ms94109b3+0,76×

Ne ölçüyor?

Büyük bir listede ardışık ve atlamalı okuma/yazmayı ölçer.

Kategori: Liste ve dizi. Liste okuma/yazma, dizinleme ve sınır denetimi. Üç program da aynı algoritmayı aynı adımlarla uygular ve aynı çıktıyı üretmek zorundadır; çıktı tutmazsa ölçüm geçersiz sayılır.

Beklenen çıktı

stdout
41538

Derleme

Komutlar ve bayraklar

KabaLang

Uçbirim
kabalang derle program.kbl -o program
./program

C++

Uçbirim
clang++ -O2 -o program program.cpp
./program

Python

Uçbirim
python3 program.py

Kaynak

Ölçülen programlar

Aşağıdaki dosyalar ölçülen programların kendisidir.

program.kbl
n = 500000
elek = [dogru] * (n + 1)
elek[0] = yanlis
elek[1] = yanlis

p = 2
iken p * p <= n:
    eger elek[p]:
        k = p * p
        iken k <= n:
            elek[k] = yanlis
            k = k + p
    p = p + 1

asal_sayisi = 0
dongu x icinde elek:
    eger x:
        asal_sayisi = asal_sayisi + 1

yazdir(asal_sayisi)
program.cpp
#include <iostream>
#include <vector>

int main() {
    int n = 500000;
    std::vector<char> elek(n + 1, 1);
    elek[0] = elek[1] = 0;
    for (int p = 2; p * p <= n; ++p) {
        if (elek[p]) {
            for (int k = p * p; k <= n; k += p) {
                elek[k] = 0;
            }
        }
    }
    int asal_sayisi = 0;
    for (int i = 0; i <= n; ++i) {
        asal_sayisi += elek[i];
    }
    std::cout << asal_sayisi << std::endl;
    return 0;
}
program.py
n = 500000
elek = [1] * (n + 1)
elek[0] = elek[1] = 0
p = 2
while p * p <= n:
    if elek[p]:
        for k in range(p * p, n + 1, p):
            elek[k] = 0
    p += 1
print(sum(elek))
program.js · yalnız tarayıcı ölçümünde
export default function program(yaz = console.log) {
  const n = 500000;
  const elek = new Uint8Array(n + 1).fill(1);
  elek[0] = elek[1] = 0;
  for (let p = 2; p * p <= n; p++) {
    if (elek[p]) {
      for (let k = p * p; k <= n; k += p) elek[k] = 0;
    }
  }
  let asalSayisi = 0;
  for (let i = 0; i <= n; i++) asalSayisi += elek[i];
  yaz(asalSayisi);
}

// `node program.js` ile de koşar (tarayıcıda ölçüm işçisi program()ı çağırır).
if (globalThis.process?.argv?.[1]?.endsWith("program.js")) program();