aboutsummaryrefslogtreecommitdiff
path: root/challenge-159/roger-bell-west/javascript/ch-2.js
diff options
context:
space:
mode:
authorPaulo Custodio <pauloscustodio@gmail.com>2022-04-12 18:56:29 +0100
committerPaulo Custodio <pauloscustodio@gmail.com>2022-04-12 18:56:29 +0100
commit49f7f459092f538b5468e255ff4e8ebac490d70a (patch)
treefa4a94a8207a58a56d4dca98ff22d39bed047f6e /challenge-159/roger-bell-west/javascript/ch-2.js
parent1711da4f548d3134248cd5e02a13d71762d5e4cb (diff)
parent72ba70a96cfd587443c3eaa0f5ba02e3557f4b82 (diff)
downloadperlweeklychallenge-club-49f7f459092f538b5468e255ff4e8ebac490d70a.tar.gz
perlweeklychallenge-club-49f7f459092f538b5468e255ff4e8ebac490d70a.tar.bz2
perlweeklychallenge-club-49f7f459092f538b5468e255ff4e8ebac490d70a.zip
Merge remote-tracking branch 'upstream/master'
# Conflicts: # challenge-160/paulo-custodio/Makefile
Diffstat (limited to 'challenge-159/roger-bell-west/javascript/ch-2.js')
-rwxr-xr-xchallenge-159/roger-bell-west/javascript/ch-2.js94
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");