# Welcome!

By registering with us, you'll be able to discuss, share and private message with other members of our community.

#### Andrew

##### Coder
Recently, I created a Factor Calculator tool in HTML and CSS and uploaded it to my webspace. It is running properly, but the calculation isn't complete. You can check it here: https://factorcalculators.com.

Please visit the provided link and enter 24 in the box. When you click enter, it displays results in Factors, Factor Pairs, and Prime Factors. The Factors and Factor Pairs results are correct, but the Prime Factorization isn't fully calculated. It shows only 24 = 2 * 3, which is incorrect. The correct Prime Factorization for the number 24 is 24 = 2 * 2 * 2 * 3. Below, I provide the code for better assistance.

HTML:
``````<!DOCTYPE html>
<html lang="en">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
margin: 0;
}

.calculator-container {
width: 100%; /* Set width to 100% for full width */
background-color: #fff;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}

h1 {
text-align: center;
margin-bottom: 20px;
}

label {
display: block;
margin-bottom: 5px;
}

input[type="number"] {
width: 100%;
margin-bottom: 10px;
border: 1px solid #ccc;
}

button {
width: 100%;
background-color: #007bff;
color: #fff;
border: none;
cursor: pointer;
}

button:hover {
background-color: #0056b3;
}

#result {
margin-top: 20px;
border: 1px solid #ccc;
}

#result h3 {
margin-bottom: 5px;
}

#result p {
margin: 0;
}

.step {
margin-bottom: 10px;
}
</style>
<body>
<div class="calculator-container">
<p>Use our Advanced version of Factor Calculator where you can find <b>Factors, Factor Pairs and Prime Factor</b> of any number. Enter a number below and press &#8220;Enter&#8221; or click &#8220;Calculate&#8221; to find its factors, factor pairs, and prime factors.</p>
<p><strong>Example:</strong> If you enter 12, the calculator will show that the factors are 1, 2, 3, 4, 6, and 12.</p>
<label for="numberInput">Enter a number:</label>
<input type="number" id="numberInput">
<button onclick="calculateFactors()">Calculate</button>
<div id="result"></div>
</div>

<script>
// Add event listener to input field to detect Enter key press
if (event.keyCode === 13) {
calculateFactors();
}
});

function calculateFactors() {
var number = parseInt(document.getElementById("numberInput").value);
var factors = [];
var factorPairs = [];
var primeFactors = [];

for (var i = 1; i <= number; i++) {
if (number % i === 0) {
factors.push(i);
factorPairs.push([i, number / i]);
}
}

for (var j = 0; j < factors.length; j++) {
if (isPrime(factors[j])) {
primeFactors.push(factors[j]);
}
}

displayResults(factors, factorPairs, primeFactors, number);
}

function isPrime(num) {
if (num <= 1) return false;
if (num <= 3) return true;
if (num % 2 === 0 || num % 3 === 0) return false;
for (var i = 5; i * i <= num; i += 6) {
if (num % i === 0 || num % (i + 2) === 0) return false;
}
return true;
}

function displayResults(factors, factorPairs, primeFactors, number) {
var resultDiv = document.getElementById("result");
var primeFactorsString = primeFactors.join(" × ");
resultDiv.innerHTML = "<h3>Results:</h3>" +
"<div class='step'><strong>Factors:</strong> " + factors.join(", ") + "</div>" +
"<div class='step'><strong>Factor Pairs:</strong><br>" + formatFactorPairs(factorPairs) + "</div>" +
"<div class='step'><strong>Prime Factors:</strong> " + number + " = " + primeFactorsString + "</div>";
}

function formatFactorPairs(pairs) {
var formattedPairs = "";
pairs.forEach(pair => {
formattedPairs += "(" + pair[0] + ", " + pair[1] + ")<br>";
});
return formattedPairs;
}
</script>
</body>
</html>``````

Hey there,

Your code for the prime factors is checking the `factors` array for any numbers that are prime numbers and pushing it to a new array `primeFactors`.
This is correct, because the prime factors for the number 24 are 2 and 3.
Prime factorization, however, is the multiplication of a number's prime factors to get the number, which I believe is what you're trying to find.

This is a bit more complicated to find, but can be achieved by dividing the number by it's largest prime factor, and pushing the prime factor to an array, then divide the result again by the largest number, and if the result is not a whole number, check the next largest prime factor and so on.
Not sure how good my explanation is, so here's a not-so-neat flowchart (I don't remember my flowchart symbols, but I hope I got it right):

Here's the above flowchart implemented in JavaScript:
JavaScript:
``````function primeFactorization(number, primeFactors) { // use your prime factor array that you created in your js
const prime_factors = [];

let result = number / primeFactors[0];
prime_factors.push(primeFactors[0]);

while (!primeFactors.includes(result)) {
let previous_result = result;
let index = 0;

do {
result = previous_result / primeFactors[index];
index++;
} while (result % 2 !== 0);

prime_factors.push(primeFactors[--index]);
}

prime_factors.push(result);

return prime_factors;
}``````
Let me know if anything isn't working

Hey there,

Your code for the prime factors is checking the `factors` array for any numbers that are prime numbers and pushing it to a new array `primeFactors`.
This is correct, because the prime factors for the number 24 are 2 and 3.
Prime factorization, however, is the multiplication of a number's prime factors to get the number, which I believe is what you're trying to find.

This is a bit more complicated to find, but can be achieved by dividing the number by it's largest prime factor, and pushing the prime factor to an array, then divide the result again by the largest number, and if the result is not a whole number, check the next largest prime factor and so on.
Not sure how good my explanation is, so here's a not-so-neat flowchart (I don't remember my flowchart symbols, but I hope I got it right):
View attachment 2527

Here's the above flowchart implemented in JavaScript:
JavaScript:
``````function primeFactorization(number, primeFactors) { // use your prime factor array that you created in your js
const prime_factors = [];

let result = number / primeFactors[0];
prime_factors.push(primeFactors[0]);

while (!primeFactors.includes(result)) {
let previous_result = result;
let index = 0;

do {
result = previous_result / primeFactors[index];
index++;
} while (result % 2 !== 0);

prime_factors.push(primeFactors[--index]);
}

prime_factors.push(result);

return prime_factors;
}``````
Let me know if anything isn't working
OK, I will try it. Thanks for your help

I haven't studied Johna's algorithm. But it seems to me that your code is largely ok, except that you try divisibility by each prime factor only once. Which is why up see each prime factor only once in the factorization. You need to keep dividing until the division does not succeed anymore - if you get my crummy explanation. Change this loop

JavaScript:
``````for (var j = 0; j < factors.length; j++) {
if (isPrime(factors[j])) {
primeFactors.push(factors[j]);
}
}``````

to

JavaScript:
``````for (fac of factors)
{
var tmp = number;
if (isPrime(fac))
{
while (tmp % fac == 0)
{
primeFactors.push(fac);
tmp /= fac;
}
}
}``````

and it will work ok. You now correctly get

Prime Factors: 24 = 2 x 2 x 2 x 3

Last edited:
A general remark : you can use `==` and `!=` instead of `===` and `!==`
That long format is only needed when you are dealing with objects and want to compare not just the values but the actual object instances. Not sure I explained that 100% correct but you may get the gist.

I haven't studied Johna's algorithm. But it seems to me that your code is largely ok, except that you try divisibility by each prime factor only once. You need to keep doing that until the division does not succeed anymore - if you get my crummy explanation. Change this loop

JavaScript:
``````for (var j = 0; j < factors.length; j++) {
if (isPrime(factors[j])) {
primeFactors.push(factors[j]);
}
}``````

to

JavaScript:
``````for (fac of factors)
{
var tmp = number;
if (isPrime(fac))
{
while (tmp % fac == 0)
{
primeFactors.push(fac);
tmp /= fac;
}
}
}``````

and it will work ok. You now correctly get

Prime Factors: 24 = 2 x 2 x 2 x 3
Knew there had to be simpler way to do it. My code seemed too complicated 😅

I haven't studied Johna's algorithm. But it seems to me that your code is largely ok, except that you try divisibility by each prime factor only once. Which is why up see each prime factor only once in the factorization. You need to keep dividing until the division does not succeed anymore - if you get my crummy explanation. Change this loop

JavaScript:
``````for (var j = 0; j < factors.length; j++) {
if (isPrime(factors[j])) {
primeFactors.push(factors[j]);
}
}``````

to

JavaScript:
``````for (fac of factors)
{
var tmp = number;
if (isPrime(fac))
{
while (tmp % fac == 0)
{
primeFactors.push(fac);
tmp /= fac;
}
}
}``````

and it will work ok. You now correctly get

Prime Factors: 24 = 2 x 2 x 2 x

Thank You. It is 100% Working Thanks again

Thank You. It is 100% Working Thanks again