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