Rebol3 Code Examplex
Arithmetic derivative
Rebol [
title: "Rosetta code: Arithmetic derivative"
file: %Arithmetic_derivative.r3
url: https://rosettacode.org/wiki/Arithmetic_derivative
]
lagarias: function [
"Recursively computes Lagarias' divisor-weighted factor-tree value for n"
n [integer!]
][
case [
n < 0 [ return negate lagarias negate n ] ;; mirror negative n through the positive case
any [n = 0 n = 1] [ return 0 ] ;; base cases: 0 and 1 have value 0
]
f: 2 while [not zero? n % f] [ ++ f ] ;; find smallest factor f of n (f = n if n is prime)
if 1 == q: n / f [ return 1 ] ;; n was prime (q = 1) -> value is 1
(q * lagarias f) + (f * lagarias q) ;; combine recursively over the two factors
]
i: 1
for n -99 100 1 [
prin pad lagarias n -5
if zero? ++ i % 10 [prin LF]
]Output:
-75 -77 -1 -272 -24 -49 -34 -96 -20 -123
-1 -140 -32 -45 -22 -124 -1 -43 -108 -176
-1 -71 -18 -80 -55 -39 -1 -156 -1 -59
-26 -72 -1 -61 -18 -192 -51 -33 -1 -92
-1 -31 -22 -92 -16 -81 -1 -56 -20 -45
-14 -112 -1 -25 -39 -48 -1 -41 -1 -68
-16 -21 -1 -60 -12 -19 -14 -80 -1 -31
-1 -32 -27 -15 -10 -44 -1 -13 -10 -24
-1 -21 -1 -32 -8 -9 -1 -16 -1 -7
-6 -12 -1 -5 -1 -4 -1 -1 0 0
0 1 1 4 1 5 1 12 6 7
1 16 1 9 8 32 1 21 1 24
10 13 1 44 10 15 27 32 1 31
1 80 14 19 12 60 1 21 16 68
1 41 1 48 39 25 1 112 14 45
20 56 1 81 16 92 22 31 1 92
1 33 51 192 18 61 1 72 26 59
1 156 1 39 55 80 18 71 1 176
108 43 1 124 22 45 32 140 1 123
20 96 34 49 24 272 1 77 75 140