OFFSET
1,2
COMMENTS
Note: the underlying function N2Qv (see the Maple code) maps natural numbers 1, 2, 3, 4, 5, ..., through all the positive rationals in the open range (0,1): 1/2, 1/3, 2/3, 1/4, 2/5, 3/5, ... bijectively to the union of positive rationals and quadratic surds. A065937 gives similar mapping involving the inverse of the standard Minkowski's question mark function.
Note the symmetry of rows 0; 5,5; 0,2,2,0; 2,3,0,3,3,0,3,2; 5,13,17,2,17,37,5,13,13,5,37,17,2,17,13,5; ... emanating from the symmetry present in A007306.
LINKS
EXAMPLE
The first few values for this mapping are N2Qv(1) = 1, N2Qv(2) = (sqrt(5)-1)/2, N2Qv(3) = (sqrt(5)+1)/2, N2Qv(4) = 1/2, N2Qv(5) = sqrt(2)/2, N2Qv(6) = sqrt(2), N2Qv(7) = 2, N2Qv(8) = sqrt(2)-1
MAPLE
[seq(find_sqrt(N2Qv(j)), j=1..512)];
N2Qv := proc(n) local m; m := n + 2^floor_log_2(n); Inverse_of_Variant_of_MinkowskisQMark(A007305(m+1)/A047679(m-1)); end;
Inverse_of_Variant_of_MinkowskisQMark := proc(r) local x, y, b, d, k, s, i, q; x := numer(r); y := denom(r); if(y = 2*x) then RETURN(1); fi; b := []; d := []; k := 0; s := 0; i := 0; while(x <> 0) do q := floor(x/y); if(i > 0) then b := [op(b), q]; d := [op(d), x]; fi; x := 2*(x-(q*y)); if(member(x, d, 'k') and (k > 1) and (b[k] <> b[k-1]) and (q <> floor(x/y))) then s := eval_periodic_confrac_tail(list2runcounts(b[k..nops(b)])); b := b[1..(k-1)]; break; fi; i := i+1; od; if(0 = k) then b := b[1..(nops(b)-1)]; b := [op(b), b[nops(b)]]; fi; if(r < (1/2)) then RETURN(factor(eval_confrac([0, op(list2runcounts(b))], s))); else RETURN(factor(eval_confrac(list2runcounts(b), s))); fi; end;
eval_confrac := proc(c, z) local x, i; x := z; for i in reverse(c) do x := (`if`((0=x), x, (1/x)))+i; od; RETURN(x); end;
eval_periodic_confrac_tail := proc(c) local x, i, u, r; x := (eval_confrac(c, u) - u) = 0; r := [solve(x, u)]; RETURN(max(r[1], r[2])); end;
list2runcounts := proc(b) local a, p, y, c; if(0 = nops(b)) then RETURN([]); fi; a := []; c := 0; p := b[1]; for y in b do if(y <> p) then a := [op(a), c]; c := 0; p := y; fi; c := c+1; od; RETURN([op(a), c]); end;
find_sqrt := proc(x) local n, i, y; n := nops(x); if(n < 2) then RETURN(0); fi; if((2 = n) and (`^` = op(0, x)) and (1/2 = op(2, x))) then RETURN(op(1, x)); else for i from 0 to n do y := find_sqrt(op(i, x)); if(y <> 0) then RETURN(y); fi; od; RETURN(0); fi; end;
CROSSREFS
KEYWORD
nonn
AUTHOR
Antti Karttunen, Dec 07 2001
EXTENSIONS
Description clarified by Antti Karttunen, Aug 26 2006
STATUS
approved