function isPrime(number) {
if (number == 1 || number == 0) {return false}
const threshold = Math.ceil(Math.sqrt(number))
for (let i = 2; i < threshold+ 1; i++) {
if ( number % i === 0) {
return false;
}
}
return true;
}
//function primeFactorize(number) {
//let resultArr = [];
//let balance = number;
//const threshold = Math.ceil(Math.sqrt(number))
//for (let i = number - 1; i > 1; i--) {
//if (number % i === 0) {
//while (balance % i === 0) {
//resultArr = resultArr.concat(primeFactorize(i))
//balance = balance / i;
//}
//}
//if (balance === 1) {return resultArr }
//}
//return [number];
//}
function primeFactorize(num) {
const resultArr = [];
let remainDivisor = num;
let actualDivisor = 1;
const alreadyDivided = [];
while (!(remainDivisor === 1)) {
const r = getNextDivisor(alreadyDivided, actualDivisor)
actualDivisor = r[0];
if (!r[1]) {alreadyDivided.push(actualDivisor) }
let resultNumber = 1;
while ((remainDivisor % actualDivisor) === 0) {
resultNumber *= actualDivisor;
remainDivisor = remainDivisor / actualDivisor;
}
if (resultNumber !== 1) { resultArr.push(resultNumber) }
}
return resultArr;
}
//console.log(primeFactorize(644));
function getNextDivisor(checkedDivisors, lastDivisor) {
let counter = lastDivisor;
let foundNext = false;
let fromAlreadyDivided = false;
while (!foundNext) {
counter++;
const isCounterAlreadyDone = checkedDivisors.some(d => (counter % d === 0))
if (isCounterAlreadyDone) { fromAlreadyDivided = true; }
if (!isCounterAlreadyDone) { foundNext = true; }
}
return [counter, fromAlreadyDivided] ;
}
class PrimeStack {
stack = [];
constructor(numberOfPrimeFactors) {
this.numberOfPrimeFactors = numberOfPrimeFactors;
}
get stack() {
return this.stack;
}
push(inputArr) {
//const resultArr = [];
//const transferArr = [];
//let betweenCounter = 0;
//inputArr.sort((a,b) => a - b);
//for (let i = 0; i < inputArr.length; i++) {
//if ( i === 0 ) {
//betweenCounter = inputArr[0];
//}
//if ( i > 0) {
//if ( inputArr[i] === inputArr[i-1] ) {
//betweenCounter *= inputArr[i]
//} else {
//resultArr.push(betweenCounter);
//betweenCounter = inputArr[i];
//}
//}
//}
//resultArr.push(betweenCounter)
if (inputArr.length !== this.numberOfPrimeFactors) {
this.stack = [];
return;
}
//resultArr.sort((a,b) => a - b);
//if (resultArr.length === this.numberOfPrimeFactors) {
//}
this.stack = this.checkIntegrityWithStack(inputArr)
}
checkIntegrityWithStack(inputArr) {
const transArr = [inputArr];
for (let i = this.stack.length -1 ; i >= 0; i--) {
if (!this.haveCommonFactor(inputArr, this.stack[i])) {
transArr.unshift(this.stack[i])
} else {
return transArr;
}
}
return transArr;
}
haveCommonFactor(arr1, arr2) {
for (let a of arr1) {
if (arr2.includes(a)) { return true;}
}
return false;
}
}
//const myStack = new PrimeStack(3);
//myStack.push(primeFactorize(645))
//myStack.push(primeFactorize(646))
//console.log(myStack.stack)
//let myStack = new PrimeStack(4)
//for (let i = 1; i < 80000; i++) {
//myStack.push(primeFactorize(i))
//if ( myStack.stack.length === 3) {
//console.log(i);
//console.log(myStack.stack)
//return;
//}
}
//let myStack = new PrimeStack(4)
//for (let i = 10000; i < 50000; i++) {
//myStack.push(primeFactorize(i))
//if ( myStack.stack.length === 4) {
//console.log(i);
//console.log(myStack.stack)
//return;
//}
//
//
// }
function dirtyCheck(number) {
const numberArr = [2,3,5,7,11]
let checkArr = [0,0,0,0,0];
for (let i in numberArr ) {
if ( number % numberArr[i] === 0 ) {
checkArr[i] = number % ( numberArr[i] * numberArr[i]) === 0 ? 0 : 1;
}
}
return checkArr;
}
// for (let i = 2; i < 17; i++) {
// console.log(i + ': ', dirtyCheck(i))
// }
//class DirtyStack {
//stack = [];
//constructor(stackSize) {
//this.stackSize = stackSize;
//}
//
//
//push(inputArr) {
//this.stack = this.checkIntegrityWithStack(inputArr)
//}
//
//checkIntegrityWithStack(inputArr) {
//const transArr = [inputArr];
//for (let i = this.stack.length -1 ; i >= 0; i--) {
//const resultVector = []
//for (let j in inputArr) {
//resultVector.push(this.stack[i][j] + inputArr[j])
//}
//if (!resultVector.find(x => x > 1)) {
//transArr.unshift(this.stack[i])
//} else {
//return transArr;
//}
//}
//return transArr;
//}
//
//}
//
//
//myDirtyStack = new DirtyStack(4);
//for (let i = 1000; i < 10000; i++) {
//
//myDirtyStack.push(dirtyCheck(i))
// if ( myDirtyStack.stack.length === 3) {
// console.log(i);
// console.log(myDirtyStack.stack)
// // return;
// }
//}
//