lambdaway
::
curzon_numbers
6
|
list
|
login
|
load
|
|
_h1 [[bigint]] | curzon numbers _p A Curzon number is defined to be a positive integer n for which {b 2{sup n}+1} is evenly divisible by 2n+1. Generalized Curzon numbers are those where the positive integer n, using a base integer k, satisfy the condition that k{sup n}+1 is evenly divisible by kn+1. _p Following [[https://rosettacode.org/wiki/Curzon_numbers|https://rosettacode.org/wiki/Curzon_numbers]], find and show the first 50 Generalized Curzon numbers for even base integers from 2 through 10. {pre '{def is_curzon {lambda {:n :k} {= {BI.% {BI.+ {BI.** :k :n} 1} {BI.+ {BI.* :k :n} 1} } 0}}} -> {def is_curzon {lambda {:n :k} {= {BI.% {BI.+ {BI.** :k :n} 1} {BI.+ {BI.* :k :n} 1} } 0}}} '{def curzon {lambda {:length :base} {S.replace \s by space in {S.brmap {{lambda {:length :base :count :i} {if {< {A.get 0 :count} :length} then {if {is_curzon :i :base} then {{lambda {:a :i} :i} {A.set! 0 {+ {A.get 0 :count} 1} :count} :i} else} else _break_} } :length :base {A.new 0}} 1 100000 1 }}}} -> {def curzon {lambda {:length :base} {S.replace \s by space in {S.brmap {{lambda {:length :base :count :i} {if {< {A.get 0 :count} :length} then {if {is_curzon :i :base} then {{lambda {:a :i} :i} {A.set! 0 {+ {A.get 0 :count} 1} :count} :i} else} else _break_} } :length :base {A.new 0}} 1 100000 1 }}}} } {prewrap '{S.map {lambda {:i} {div {b First 50 Curzon numbers using a base of :i:} {div {curzon 50 :i}}}} {S.serie 2 10 2}} -> {S.map {lambda {:i} {div {b First 50 Curzon numbers using a base of :i:} {div {curzon 50 :i}}}} {S.serie 2 10 2}} '{S.last {curzon 1000 6}} -> 20717 in 272193ms = {/ 272193 1000 60} minutes } {hr} _h2 control {prewrap First 50 Curzon numbers using a base of 2: 1 2 5 ... 249 254 / Thousandth: 8646 First 50 Curzon numbers using a base of 4: 1 3 7 ... 277 279 / Thousandth: 9375 First 50 Curzon numbers using a base of 6: 1 6 30 ... 670 685 / Thousandth: 20717 First 50 Curzon numbers using a base of 8: 1 14 35 ... 696 735 / Thousandth: 22176 First 50 Curzon numbers using a base of 10: 1 9 10 ... 1785 1837 / Thousandth: 46845 } {script LAMBDATALK.DICT['BigInt'] = function() { var args = arguments[0].trim(); return BigInt( Number(args) ) }; LAMBDATALK.DICT['BI.+'] = function() { var args = arguments[0].trim().split(' '); return BigInt( args[0] ) + BigInt( args[1] ) }; LAMBDATALK.DICT['BI.-'] = function() { var args = arguments[0].trim().split(' '); return BigInt( args[0] ) - BigInt( args[1] ) }; LAMBDATALK.DICT['BI.*'] = function() { var args = arguments[0].trim().split(' '); return BigInt( args[0] ) * BigInt( args[1] ) }; LAMBDATALK.DICT['BI./'] = function() { var args = arguments[0].trim().split(' '); return BigInt( args[0] ) / BigInt( args[1] ) }; LAMBDATALK.DICT['BI.%'] = function() { var args = arguments[0].trim().split(' '); return BigInt( args[0] ) % BigInt( args[1] ) }; LAMBDATALK.DICT['BI.**'] = function() { var args = arguments[0].trim().split(' '); return BigInt( args[0] ) ** BigInt( args[1] ) }; } {script LAMBDATALK.DICT['S.brmap'] = function () { var args = LAMBDATALK.supertrim(arguments[0]).split(' '); var func = args[0], a = parseInt( args[1] ), b = parseInt( args[2] ), c = parseInt( args[3] || 1 ), s = ''; if (b < a) return 'bad interval'; if (LAMBDATALK.DICT[func] === undefined) return func + ' is undefined'; for (var i=a; i< b; i=i+c) { var value = LAMBDATALK.eval_forms( "{" + func + " " + i + "}" ); if (value === "_break_") break; s += value + ' '; } return s }; }
lambdaway v.20211111