const isPrime = (n) => { if (n < 2) { return false; } if (n === 2) { return true; } if (n % 2 === 0) { return false; } const limit = Math.floor(Math.sqrt(n)); for (let i = 3; i <= limit; i += 2) { if (n % i === 0) { return false; } } return true; }; const primes = [2]; const primeAt = (index) => { while (primes.length < index) { let candidate = primes[primes.length - 1] + 1; while (!isPrime(candidate)) { candidate += 1; } primes.push(candidate); } return primes[index - 1]; }; const computeGodelNumber = (sequence) => { return sequence.reduce((acc, exponent, idx) => { const prime = BigInt(primeAt(idx + 1)); return acc * prime ** BigInt(exponent); }, BigInt(1)) - BigInt(1); }; self.addEventListener("message", (event) => { const result = computeGodelNumber(event.data); self.postMessage(result.toString()); });