Bläddra i källkod

add cluster prime validator

Richard Köhl 3 år sedan
förälder
incheckning
7d8ed5dca0
2 ändrade filer med 104 tillägg och 0 borttagningar
  1. 84 0
      src/prime.class.test.ts
  2. 20 0
      src/prime.class.ts

+ 84 - 0
src/prime.class.test.ts

@@ -557,4 +557,88 @@ Deno.test("Prime class", async (t) => {
       });
     });
   });
+
+  await t.step("static method isClusterPrime()", async (t) => {
+    await t.step("validate cluster prime numbers", () => {
+      [
+        3,
+        5,
+        7,
+        11,
+        13,
+        17,
+        19,
+        23,
+      ].forEach((number) => {
+        assert(
+          Prime.isClusterPrime(number),
+          `${number} is a cluster prime`,
+        );
+      });
+    });
+
+    await t.step("validate non-cluster-prime numbers", () => {
+      [
+        2,
+        97,
+        127,
+        149,
+        191,
+        211,
+        223,
+        227,
+        229,
+        251,
+        257,
+        263,
+        269,
+        293,
+        307,
+        331,
+        337,
+        347,
+        349,
+        367,
+        373,
+        379,
+        383,
+        397,
+        409,
+        419,
+        431,
+        457,
+        479,
+        487,
+        499,
+        521,
+        541,
+        547,
+        557,
+        563,
+        569,
+        587,
+        593,
+        599,
+        631,
+        641,
+        673,
+        691,
+        701,
+        709,
+        719,
+        727,
+        733,
+        739,
+        743,
+        751,
+        100,
+        333,
+      ].forEach((number) => {
+        assert(
+          !Prime.isClusterPrime(number),
+          `${number} is NOT a cluster prime`,
+        );
+      });
+    });
+  });
 });

+ 20 - 0
src/prime.class.ts

@@ -211,6 +211,26 @@ export class Prime {
     return false;
   }
 
+  public static isClusterPrime(number: number): boolean {
+    if (number < 3 || !Prime.isPrime(number)) {
+      return false;
+    }
+
+    let arr: number[] = [];
+    for (let k = 4; k <= number - 3; k += 2) {
+      arr.push(k);
+    }
+
+    const primes = Prime.list(number).filter((p) => p > 2);
+    primes.forEach((a) => {
+      primes.forEach((b) => {
+        arr = arr.filter((n) => n !== a - b && n !== b - a);
+      })
+    })
+
+    return arr.length === 0;
+  }
+
   public static list(to: number): number[] {
     if (to < 2) {
       return [];