diff options
Diffstat (limited to 'challenge-159/roger-bell-west/javascript/ch-2.js')
| -rwxr-xr-x | challenge-159/roger-bell-west/javascript/ch-2.js | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/challenge-159/roger-bell-west/javascript/ch-2.js b/challenge-159/roger-bell-west/javascript/ch-2.js new file mode 100755 index 0000000000..619b239213 --- /dev/null +++ b/challenge-159/roger-bell-west/javascript/ch-2.js @@ -0,0 +1,94 @@ +#! /usr/bin/node + +function genprimes(mx) { + let primesh=new Set([2,3]) + for (let i = 6; i <= mx; i += 6) { + for (let j = i-1; j <= i+1; j += 2) { + if (j <= mx) { + primesh.add(j); + } + } + } + let q=[2,3,5,7]; + let p=q.shift(); + let mr=Math.floor(Math.sqrt(mx)); + while (p <= mr) { + if (primesh.has(p)) { + let i=p*p + for (let i=p*p; i <= mx; i += p) { + primesh.delete(i); + } + } + if (q.length < 2) { + q.push(q[q.length-1]+4); + q.push(q[q.length-1]+2); + } + p=q.shift(); + } + let primes=[...primesh]; + primes.sort(function(a,b) { + return a-b; + }); + return primes; +} + +function primefactor (n) { + let f=new Map() + let m=n + for (let p of genprimes(Math.floor(Math.sqrt(n)))) { + while (m % p == 0) { + m=Math.floor(m/p) + if (f.has(p)) { + f.set(p,f.get(p)+1) + } else { + f.set(p,1) + } + if (m == 1) { + break + } + } + } + if (m > 1) { + if (f.has(m)) { + f.set(m,f.get(m)+1) + } else { + f.set(m,1) + } + } + return f +} + +function moebius (n) { + let z=0 + for (let v of primefactor(n).values()) { + if (v > 1) { + return 0 + } + z++ + } + if (z % 2 == 0) { + return 1 + } + return -1 +} + +if (moebius(5) == -1) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); + +if (moebius(10) == 1) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); + +if (moebius(20) == 0) { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write("\n"); |
