Euclid's algorithm written by hand, checked against the standard library
// Euclid's algorithm written by hand, checked against the standard library.
import std.io.println;
import std.text.number;
import std.math.integer;
def euclid(a: uint, b: uint): uint {
let x: mutable uint = a;
let y: mutable uint = b;
while (y != 0) {
let rest: uint = x % y;
x := y;
y := rest;
}
return x;
}
def main(): int {
println(uint_to_text(euclid(1071, 462)));
println(uint_to_text(gcd(1071, 462)));
// lcm returns an option: the multiple may not fit in a uint.
match lcm(4, 6) with
| option.some(value) -> { println(uint_to_text(value)); }
| option.none -> { println("overflow"); };
return 0;
}// خوارزمية إقليدس مكتوبة يدويا ومقارنة بالمكتبة القياسية.
استورد std.io.println;
استورد std.text.number;
استورد std.math.integer;
عرف إقليدس(أ: طبيعي, ب: طبيعي): طبيعي {
دع س: متغير طبيعي = أ;
دع ص: متغير طبيعي = ب;
طالما (ص != 0) {
دع الباقي: طبيعي = س % ص;
س := ص;
ص := الباقي;
}
أرجع س;
}
عرف الرئيسية(): عدد {
اطبع_سطر(طبيعي_إلى_نص(إقليدس(1071, 462)));
اطبع_سطر(طبيعي_إلى_نص(القاسم_المشترك_الأكبر(1071, 462)));
// المضاعف المشترك الأصغر يرجع `اختياري`: قد لا يتسع الناتج في `طبيعي`.
طابق المضاعف_المشترك_الأصغر(4, 6) مع
| اختياري.موجود(القيمة) -> { اطبع_سطر(طبيعي_إلى_نص(القيمة)); }
| اختياري.لا_شيء -> { اطبع_سطر("تجاوز"); };
أرجع 0;
}
Run it
With the interpreter, without compiling:
./build/sultanc run examples/en/algorithms/gcd.snOr compile it to an executable:
./build/sultanc examples/en/algorithms/gcd.sn -o build/example && ./build/example