RosettaCodeData/Task/Cuban-primes/JavaScript/cuban-primes.js
2026-04-30 12:34:36 -04:00

68 lines
1.5 KiB
JavaScript

const MAX = 1400000;
const primes = new Array(MAX);
function preCompute() {
// Initialize sieve
for (let i = 2; i < MAX; i++) {
primes[i] = true;
}
// Sieve of Eratosthenes
for (let i = 2; i < MAX; i++) {
if (primes[i]) {
for (let j = 2 * i; j < MAX; j += i) {
primes[j] = false;
}
}
}
}
function isPrime(n) {
if (n < MAX) {
return primes[n];
}
const max = Math.floor(Math.sqrt(n));
for (let i = 3; i <= max; i++) {
if (primes[i] && n % i === 0) {
return false;
}
}
return true;
}
function cubanPrime(n, display) {
let count = 0;
let result = 0;
let output = '';
for (let i = 0; count < n; i++) {
const test = 1 + 3 * i * (i + 1);
if (isPrime(test)) {
count++;
result = test;
if (display) {
const formatted = test.toLocaleString('en-US').padStart(10);
output += formatted + (count % 10 === 0 ? '\n' : '');
}
}
}
if (display) {
console.log(output);
}
return result;
}
// Main execution
preCompute();
// First 200 Cuban primes
cubanPrime(200, true);
console.log();
// Specific Cuban primes
for (let i = 1; i <= 5; i++) {
const max = Math.pow(10, i);
const prime = cubanPrime(max, false);
console.log(`${max.toLocaleString('en-US')}-th cuban prime = ${prime.toLocaleString('en-US')}`);
}