diff --git a/Project-Euler/Problem026.js b/Project-Euler/Problem026.js
new file mode 100644
index 0000000000..684f1c55a1
--- /dev/null
+++ b/Project-Euler/Problem026.js
@@ -0,0 +1,56 @@
+/**
+ * Problem - Longest Recurring Cycle
+ *
+ * @see {@link https://projecteuler.net/problem=26}
+ *
+ * Find the value of denominator < 1000 for which 1/denominator contains the longest recurring cycle in its decimal fraction part.
+ */
+
+/**
+ * Main function to find the denominator < limit with the longest recurring cycle in 1/denominator.
+ *
+ * @param {number} limit - The upper limit for the denominator (exclusive).
+ * @returns {number} The denominator that has the longest recurring cycle in its decimal fraction part.
+ */
+function findLongestRecurringCycle(limit) {
+  /**
+   * Calculates the length of the recurring cycle for 1 divided by a given denominator.
+   *
+   * @param {number} denominator - The denominator of the unit fraction (1/denominator).
+   * @returns {number} The length of the recurring cycle in the decimal part of 1/denominator.
+   */
+  function getRecurringCycleLength(denominator) {
+    const remainderPositions = new Map()
+    let numerator = 1
+    let position = 0
+
+    while (numerator !== 0) {
+      if (remainderPositions.has(numerator)) {
+        return position - remainderPositions.get(numerator)
+      }
+
+      remainderPositions.set(numerator, position)
+
+      numerator = (numerator * 10) % denominator
+      position++
+    }
+
+    return 0
+  }
+
+  let maxCycleLength = 0
+  let denominatorWithMaxCycle = 0
+
+  for (let denominator = 2; denominator < limit; denominator++) {
+    const cycleLength = getRecurringCycleLength(denominator)
+
+    if (cycleLength > maxCycleLength) {
+      maxCycleLength = cycleLength
+      denominatorWithMaxCycle = denominator
+    }
+  }
+
+  return denominatorWithMaxCycle
+}
+
+export { findLongestRecurringCycle }
diff --git a/Project-Euler/Problem027.js b/Project-Euler/Problem027.js
new file mode 100644
index 0000000000..d1d27aa3b2
--- /dev/null
+++ b/Project-Euler/Problem027.js
@@ -0,0 +1,51 @@
+/**
+ * Problem - Quadratic Primes
+ *
+ * @see {@link https://projecteuler.net/problem=27}
+ *
+ * The quadratic expression n^2 + an + b, where |a| < 1000 and |b| ≤ 1000,
+ * produces a positive prime for consecutive values of n, starting with n = 0.
+ * Find the product of the coefficients, a and b, for the quadratic expression that
+ * produces the maximum number of primes for consecutive values of n.
+ */
+
+/**
+ * Main function to find the coefficients a and b that produce the maximum number
+ * of consecutive primes for the quadratic expression n^2 + an + b.
+ *
+ * @returns {{maxPrimes: number, product: number}} An object containing the maximum number of primes
+ * and the product of coefficients a and b.
+ */
+function findMaxConsecutivePrimes() {
+  function isPrime(n) {
+    if (n < 2) return false
+    if (n === 2) return true
+    if (n % 2 === 0) return false
+    for (let i = 3; i <= Math.sqrt(n); i += 2) {
+      if (n % i === 0) return false
+    }
+    return true
+  }
+
+  let maxPrimes = 0
+  let product = 0
+
+  for (let a = -999; a < 1000; a++) {
+    for (let b = -1000; b <= 1000; b++) {
+      let n = 0
+      while (true) {
+        const result = n * n + a * n + b
+        if (result < 0 || !isPrime(result)) break
+        n++
+      }
+      if (n > maxPrimes) {
+        maxPrimes = n
+        product = a * b
+      }
+    }
+  }
+
+  return { maxPrimes, product }
+}
+
+export { findMaxConsecutivePrimes }
diff --git a/Project-Euler/Problem029.js b/Project-Euler/Problem029.js
new file mode 100644
index 0000000000..f24da79dd6
--- /dev/null
+++ b/Project-Euler/Problem029.js
@@ -0,0 +1,39 @@
+/**
+ * Problem - Distinct Powers
+ *
+ * Find the number of distinct terms generated by a^b for 2 ≤ a ≤ 100 and 2 ≤ b ≤ 100.
+ */
+
+/**
+ * Main function to count distinct powers a^b.
+ *
+ * @param {number} minA
+ * @param {number} maxA
+ * @param {number} minB
+ * @param {number} maxB
+ * @returns {number}
+ */
+function countDistinctPowers(minA, maxA, minB, maxB) {
+  /**
+   * Set to store distinct terms generated by a^b.
+   */
+  const distinctTerms = new Set()
+
+  for (let a = minA; a <= maxA; a++) {
+    for (let b = minB; b <= maxB; b++) {
+      distinctTerms.add(Math.pow(a, b))
+    }
+  }
+
+  return distinctTerms.size
+}
+
+const minA = 2
+const maxA = 100
+const minB = 2
+const maxB = 100
+
+const result = countDistinctPowers(minA, maxA, minB, maxB)
+console.log(`Number of distinct terms: ${result}`)
+
+export { countDistinctPowers }
diff --git a/Project-Euler/Problem030.js b/Project-Euler/Problem030.js
new file mode 100644
index 0000000000..d53aba8097
--- /dev/null
+++ b/Project-Euler/Problem030.js
@@ -0,0 +1,33 @@
+/**
+ * Problem - Sum of Fifth Powers of Digits
+ *
+ * Find the sum of all the numbers that can be written as the sum of fifth powers of their digits.
+ *
+ * @see {@link https://projecteuler.net/problem=30}
+ */
+
+/**
+ * Main function to calculate the sum of all numbers that can be expressed
+ * as the sum of the fifth powers of their digits.
+ *
+ * @returns {number} The sum of all numbers that can be written as the sum of fifth powers of their digits.
+ */
+function sumOfFifthPowers() {
+  const fifthPowers = Array.from({ length: 10 }, (_, i) => i ** 5)
+  const results = []
+
+  for (let num = 10; num < 354295; num++) {
+    const sumOfDigits = num
+      .toString()
+      .split('')
+      .reduce((sum, digit) => sum + fifthPowers[digit], 0)
+
+    if (sumOfDigits === num) {
+      results.push(num)
+    }
+  }
+
+  return results.reduce((acc, curr) => acc + curr, 0)
+}
+
+export { sumOfFifthPowers }
diff --git a/Project-Euler/test/Problem026.test.js b/Project-Euler/test/Problem026.test.js
new file mode 100644
index 0000000000..67f60c2b48
--- /dev/null
+++ b/Project-Euler/test/Problem026.test.js
@@ -0,0 +1,16 @@
+import { findLongestRecurringCycle } from '../Problem026'
+
+/**
+ * Tests for the findLongestRecurringCycle function.
+ */
+describe('findLongestRecurringCycle', () => {
+  it.each([
+    { limit: 10, expected: 7 },
+    { limit: 1000, expected: 983 }, // The denominator with the longest cycle for limit of 1000
+    { limit: 4, expected: 3 },
+    { limit: 2, expected: 0 } // No cycle for fractions 1/1 and 1/2
+  ])('should return $expected for limit of $limit', ({ limit, expected }) => {
+    const result = findLongestRecurringCycle(limit)
+    expect(result).toBe(expected)
+  })
+})
diff --git a/Project-Euler/test/Problem027.test.js b/Project-Euler/test/Problem027.test.js
new file mode 100644
index 0000000000..f7859f03d6
--- /dev/null
+++ b/Project-Euler/test/Problem027.test.js
@@ -0,0 +1,9 @@
+import { findMaxConsecutivePrimes } from '../Problem027'
+
+describe('Problem 027 - Quadratic Primes', () => {
+  test('should return the correct product of coefficients for max consecutive primes', () => {
+    const { maxPrimes, product } = findMaxConsecutivePrimes()
+    expect(maxPrimes).toBe(71)
+    expect(product).toBe(-59231)
+  })
+})
diff --git a/Project-Euler/test/Problem029.test.js b/Project-Euler/test/Problem029.test.js
new file mode 100644
index 0000000000..428ce1813d
--- /dev/null
+++ b/Project-Euler/test/Problem029.test.js
@@ -0,0 +1,20 @@
+import { countDistinctPowers } from '../Problem029'
+
+/**
+ * Tests for the countDistinctPowers function.
+ */
+describe('countDistinctPowers', () => {
+  it.each([
+    { minA: 2, maxA: 5, minB: 2, maxB: 5, expected: 15 },
+    { minA: 2, maxA: 100, minB: 2, maxB: 100, expected: 9183 },
+    { minA: 2, maxA: 2, minB: 2, maxB: 2, expected: 1 },
+    { minA: 3, maxA: 3, minB: 2, maxB: 5, expected: 4 },
+    { minA: 10, maxA: 10, minB: 2, maxB: 5, expected: 4 }
+  ])(
+    'should return $expected for ranges $minA to $maxA and $minB to $maxB',
+    ({ minA, maxA, minB, maxB, expected }) => {
+      const result = countDistinctPowers(minA, maxA, minB, maxB)
+      expect(result).toBe(expected)
+    }
+  )
+})
diff --git a/Project-Euler/test/Problem030.test.js b/Project-Euler/test/Problem030.test.js
new file mode 100644
index 0000000000..bc0ac30e36
--- /dev/null
+++ b/Project-Euler/test/Problem030.test.js
@@ -0,0 +1,8 @@
+import { sumOfFifthPowers } from '../Problem030' // Adjust the path if necessary
+
+describe('sumOfFifthPowers', () => {
+  it('should return the sum of all numbers that can be written as the sum of fifth powers of their digits', () => {
+    const result = sumOfFifthPowers()
+    expect(result).toBe(443839) // Expected result based on the problem statement
+  })
+})