Ruud H.G. van Tol on Thu, 23 Dec 2021 02:50:28 +0100


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Collatz sieving



Collatz-afficionados will like this:

- - - - - - -

A060565m(n) = if(!n,return(1)); my(
x=2*n+1, x1=x
); while(
x1>=x, x1=(3*x1+1)/2; while(
!(x1%2), x1/=2; if(x1<=x, break)
)
); x1

A122458m(n) = if(!n,return(1)); my(
x=2*n+1, x1=x, c=0
); while(
x1>=x, c++; x1=(3*x1+1)/2; while(
!(x1%2), x1/=2; if(x1<=x, break)
)
); c

p2f(p2, w=9) = if(p2>w, Str("2^", p2), 2^p2)
p3f(p3, w=7) = if(p3>w, Str("3^", p3), 3^p3)

for(n=0, 21, my(
x=2*n+1, c=A060565m(n), p3=A122458m(n), p2=floor(1+p3*log(3)/log(2))
); printf(
"%3s| (%4sx +%3s) -> (%4sx +%3s) | %3s -> %3s\n",
n, p2f(p2), x, p3f(p3), c, x, c
)
)

--n|----p2-----x--------p3-----c--|---x------c-
  0| (   4x +  1) -> (   3x +  1) |   1 ->   1
  1| (  16x +  3) -> (   9x +  2) |   3 ->   2
  2| (   4x +  5) -> (   3x +  4) |   5 ->   4
  3| ( 128x +  7) -> (  81x +  5) |   7 ->   5
  4| (   4x +  9) -> (   3x +  7) |   9 ->   7
  5| (  32x + 11) -> (  27x + 10) |  11 ->  10
  6| (   4x + 13) -> (   3x + 10) |  13 ->  10
  7| ( 128x + 15) -> (  81x + 10) |  15 ->  10
  8| (   4x + 17) -> (   3x + 13) |  17 ->  13
  9| (  16x + 19) -> (   9x + 11) |  19 ->  11
 10| (   4x + 21) -> (   3x + 16) |  21 ->  16
 11| (  32x + 23) -> (  27x + 20) |  23 ->  20
 12| (   4x + 25) -> (   3x + 19) |  25 ->  19
 13| (2^59x + 27) -> (3^37x + 23) |  27 ->  23
 14| (   4x + 29) -> (   3x + 22) |  29 ->  22
 15| (2^56x + 31) -> (3^35x + 23) |  31 ->  23
 16| (   4x + 33) -> (   3x + 25) |  33 ->  25
 17| (  16x + 35) -> (   9x + 20) |  35 ->  20
 18| (   4x + 37) -> (   3x + 28) |  37 ->  28
 19| ( 256x + 39) -> ( 243x + 38) |  39 ->  38
 20| (   4x + 41) -> (   3x + 31) |  41 ->  31
 21| (  32x + 43) -> (  27x + 37) |  43 ->  37


Cross-check of 37:
x=8: ( 4x+ 5) = 37 -> ( 3x+ 4) = 28
x=7: ( 4x+ 9) = 37 -> ( 3x+ 7) = 28
x=6: ( 4x+13) = 37 -> ( 3x+10) = 28
:
x=0: ( 4x+37) = 37 -> ( 3x+28) = 28


Cross-check of 19:
x=1: (16x+ 3) = 19 -> ( 9x+ 2) = 11
x=0: (16x+19) = 19 -> ( 9x+11) = 11


Cross-check of 43:
x=1: (32x+11) = 43 -> (27x+10) = 37
x=0: (32x+43) = 43 -> (27x+37) = 37

- - - - - - -

-- Greetings, Ruud