// غربال إراتوستينس: كل الأعداد الأولية الأصغر من 50.
استورد std.io.println;
استورد std.text.number;
استورد std.text.transform;
عرف الرئيسية(): عدد {
دع الحد: طبيعي = 50;
دع مركب: متغير متجه منطقي = [];
دع ف: متغير طبيعي = 0;
طالما (ف < الحد) { ألحق(مركب, خطأ); ف := ف + 1; }
دع الأوليات: متغير متجه نص = [];
دع المرشح: متغير طبيعي = 2;
طالما (المرشح < الحد) {
إذا (!مركب[المرشح]) {
ألحق(الأوليات, طبيعي_إلى_نص(المرشح));
دع المضاعف: متغير طبيعي = المرشح * المرشح;
طالما (المضاعف < الحد) {
مركب[المضاعف] := صواب;
المضاعف := المضاعف + المرشح;
}
};
المرشح := المرشح + 1;
}
دع المسافة: نص = " ";
اطبع_سطر(صل_النصوص(&الأوليات, &المسافة));
أرجع 0;
}// Sieve of Eratosthenes: every prime below 50.
import std.io.println;
import std.text.number;
import std.text.transform;
def main(): int {
let limit: uint = 50;
let composite: mutable vector bool = [];
let i: mutable uint = 0;
while (i < limit) { append(composite, false); i := i + 1; }
let primes: mutable vector string = [];
let candidate: mutable uint = 2;
while (candidate < limit) {
if (!composite[candidate]) {
append(primes, uint_to_text(candidate));
let multiple: mutable uint = candidate * candidate;
while (multiple < limit) {
composite[multiple] := true;
multiple := multiple + candidate;
}
};
candidate := candidate + 1;
}
let space: string = " ";
println(join(&primes, &space));
return 0;
}
التشغيل
بالمفسر، دون ترجمة:
./build/sultanc run examples/ar/algorithms/sieve.snأو ترجمه إلى ملف تنفيذي:
./build/sultanc examples/ar/algorithms/sieve.sn -o build/example && ./build/example