lambdaway
::
anti_primes
5
|
list
|
login
|
load
|
|
_h1 anti primes _p Following [[rosetta|https://rosettacode.org/wiki/Anti-primes]] the anti-primes are the natural numbers with more factors than any smaller than itself. _h2 javascript via lambdatalk {prewrap 1) building a javascript primitive: '{script LAMBDATALK.DICT['jsgenerateAntiprimes'] = function() { function factors(n) { var factors = []; for (var i = 1; i <= n; i++) { if (n % i == 0) { factors.push(i); } } return factors; } function generateAntiprimes(n) { var antiprimes = []; var maxFactors = 0; for (var i = 1; antiprimes.length < n; i++) { var ifactors = factors(i); if (ifactors.length > maxFactors) { antiprimes.push(i); maxFactors = ifactors.length; } } return antiprimes; } return generateAntiprimes( arguments[0].trim() ) }; } 2) usage: '{jsgenerateAntiprimes 20} -> 1,2,4,6,12,24,36,48,60,120,180,240,360,720,840,1260,1680,2520,5040,7560 // in 100ms } _h2 lambdatalk {prewrap '{def factors {def factors.filter {lambda {:n :a :i} {if {= {% :n :i} 0} then {A.addlast! :i :a} else}}} {lambda {:n} {S.last {S.map {factors.filter :n {A.new}} {S.serie 1 :n}}}}} -> {def factors {def factors.filter {lambda {:n :a :i} {if {= {% :n :i} 0} then {A.addlast! :i :a} else }}} {lambda {:n} {S.last {S.map {factors.filter :n {A.new}} {S.serie 1 :n}}}}} '{factors 7500} -> [1,2,3,4,5,6,10,12,15,20,25,30,50,60,75,100,125,150,250,300,375,500,625,750,1250,1500,1875,2500,3750,7500] // in 70ms '{def antiprimes {def antiprimes.filter {lambda {:ap :max :i} {let { {:ap :ap} {:max :max} {:i :i} {:len {A.length {factors :i}}} } {if {> :len {A.get 0 :max}} then {A.addlast! :i :ap} {A.set! 0 :len :max} else} }}} {lambda {:n} {S.first {S.map {antiprimes.filter {A.new 1} {A.new 1}} {S.serie 1 :n}}}}} -> {def antiprimes {def antiprimes.filter {lambda {:ap :max :i} {let { {:ap :ap} {:max :max} {:i :i} {:len {A.length {factors :i}}} } {if {> :len {A.get 0 :max}} then {A.addlast! :i :ap} {A.set! 0 :len :max} else} }}} {lambda {:n} {S.first {S.map {antiprimes.filter {A.new 1} {A.new 1}} {S.serie 1 :n}}}}} '{antiprimes 8000} -> [1,2,4,6,12,24,36,48,60,120,180,240,360,720,840,1260,1680,2520,5040,7560] // in 105400ms on my iPad } {script LAMBDATALK.DICT['jsgenerateAntiprimes'] = function() { function factors(n) { var factors = []; for (var i = 1; i <= n; i++) { if (n % i == 0) { factors.push(i); } } return factors; } function generateAntiprimes(n) { var antiprimes = []; var maxFactors = 0; for (var i = 1; antiprimes.length < n; i++) { var ifactors = factors(i); if (ifactors.length > maxFactors) { antiprimes.push(i); maxFactors = ifactors.length; } } return antiprimes; } return generateAntiprimes( arguments[0].trim() ) }; }
lambdaway v.20211111