RosettaCodeData/Task/Arithmetic-derivative/Cowgol/arithmetic-derivative.cowgol
2025-02-27 18:35:13 -05:00

43 lines
869 B
Text

include "cowgol.coh";
sub abs(n: int32): (r: uint32) is
if n<0 then
r := (-n) as uint32;
else
r := n as uint32;
end if;
end sub;
sub printcol(n: int32, s: uint8) is
var buf: uint8[12];
var ptr := IToA(n, 10, &buf[0]);
s := s - (ptr - &buf[0]) as uint8;
while s>0 loop
print_char(' ');
s := s-1;
end loop;
print(&buf[0]);
end sub;
sub lagarias(n: int32): (r: int32) is
var nn := abs(n);
r := 0;
if nn<2 then return; end if;
var f: uint32 := 2;
while f<=nn loop
while nn%f == 0 loop
r := r + n/f as int32;
nn := nn/f;
end loop;
f := f+1;
end loop;
end sub;
var i: int32 := -99;
var c: uint8 := 0;
while i <= 100 loop
printcol(lagarias(i), 7);
i := i+1;
c := c+1;
if c%10 == 0 then print_nl(); end if;
end loop;