44 lines
1.1 KiB
Plaintext
44 lines
1.1 KiB
Plaintext
lagarias = function (n) // Lagarias arithmetic derivative
|
|
if n < 0 then
|
|
return -lagarias (-n)
|
|
else if n == 0 or n == 1 then
|
|
return 0
|
|
else
|
|
smallPf = function (j, k) // Smallest prime factor
|
|
if j % k == 0 then
|
|
return k
|
|
else
|
|
return smallPf (j, k + 1)
|
|
end if
|
|
end function
|
|
f = smallPf (n, 2)
|
|
q = floor (n / f)
|
|
if q == 1 then
|
|
return 1
|
|
else
|
|
return q * lagarias (f) + f * lagarias (q)
|
|
end if
|
|
end if
|
|
end function
|
|
fmt6 = function (n) // return a 6 character string representation of n
|
|
s = str( n )
|
|
if s.len > 5 then
|
|
return s
|
|
else
|
|
return ( " " * ( 6 - s.len ) ) + s
|
|
end if
|
|
end function
|
|
ad = ""
|
|
for n in range( -99, 100 )
|
|
ad = ad + " " + fmt6( lagarias (n) )
|
|
if n % 10 == 0 then
|
|
print( ad )
|
|
ad = ""
|
|
end if
|
|
end for
|
|
print()
|
|
for n in range( 1, 17 ) // 18, 19 and 20 would overflow ????? TODO: check
|
|
m = 10 ^ n
|
|
print( "D(" + str(m) + ") / 7 = " + str( floor (lagarias (m) / 7) ) )
|
|
end for
|