@lucadani7/algonodejs-for-beginners
Version:
Just a simple Node.js package with some basic algorithms perfect for people just starting out. It's got easy-to-understand TypeScript versions of stuff like sorting, searching, math with numbers, and messing with strings.
39 lines (38 loc) • 1.51 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ErathostenesSieve = void 0;
class ErathostenesSieve {
static deleteElemFromSieve(ourList, value) {
ourList[value >> 3] &= ~(1 << (value & 7));
}
static checkElemFromSieve(ourList, value) {
return (ourList[value >> 3] & (1 << (value & 7))) !== 0;
}
static primesGenerator(value) {
let primesArray = new Array();
primesArray.push(2);
const dim = Math.floor(value / 16) + 1;
let ourList = new Array(dim);
ourList.fill(0xFF, 0, dim);
for (let i = 1; ((i * i) << 1) + (i << 1) <= value; ++i) {
// if 2 * i + 1 is prime
if (this.checkElemFromSieve(ourList, i)) {
for (let j = ((i * i) << 1) + (i << 1); (j << 1) + 1 <= value; j += (i << 1) + 1) {
this.deleteElemFromSieve(ourList, j); // delete multiples of 2 * i + 1
}
}
}
for (let i = 1; (i << 1) + 1 <= value; ++i) {
if (this.checkElemFromSieve(ourList, i)) {
primesArray.push((i << 1) + 1);
}
}
return primesArray;
}
static erathostenesIntervalGenerator(start, end) {
const startValue = Math.min(start, end);
const endValue = Math.max(start, end);
return this.primesGenerator(endValue).filter(elem => elem >= startValue && elem <= endValue);
}
}
exports.ErathostenesSieve = ErathostenesSieve;