23 lines
800 B
Plaintext
23 lines
800 B
Plaintext
BEGIN PROC lagarias = (LONG INT n) LONG INT: # Lagarias arithmetic derivative #
|
|
IF n < 0
|
|
THEN -lagarias (-n)
|
|
ELIF n = 0 OR n = 1
|
|
THEN 0
|
|
ELIF PROC small pf = (LONG INT j, k) LONG INT: # Smallest prime factor #
|
|
(j %* k = 0 | k | small pf (j, k + 1));
|
|
LONG INT f = small pf (n, 2); LONG INT q = n % f;
|
|
q = 1
|
|
THEN 1
|
|
ELSE q * lagarias (f) + f * lagarias (q)
|
|
FI;
|
|
|
|
FOR n FROM -99 TO 100
|
|
DO print (("D(", whole (n, 0), ") = ", whole (lagarias (n), 0), new line))
|
|
OD;
|
|
new line (standout);
|
|
FOR n TO 20
|
|
DO LONG INT m = LONG 10 ^ n;
|
|
print (("D(", whole (m, 0), ") / 7 = ", whole (lagarias (m) % 7, 0), new line))
|
|
OD
|
|
END
|