-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path003.js
66 lines (51 loc) · 1.48 KB
/
003.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/**
* Largest Prime Factor
* https://projecteuler.net/problem=3
* Calculate the largest prime factor of the number 600851475143
*
* Ashen Gunaratne
*
*/
/**
* @function largestPrimeFactor
* @summary Calculates largest prime factor
* @param {Number} number
* @description Returns the largest prime factor of the parameterised argument
*/
const largestPrimeFactor = function computeLargestPrimeFactor(number) {
// stage
let factor;
// prime factorize
for (let i = 2; number !== 1; i++) {
if (number % i !== 0) {
continue
}
if (!isPrime(i)) {
continue;
}
number /= i;
factor = i;
}
// large most prime factor
return factor;
};
/**
* @function isPrime
* @summary Determines whether the parameterised number is a prime
* @param {Number} number
* @description Returns true if the parameterised argument is a prime number or false otherwise using Trial Division primality testing
*/
const isPrime = function checkWhetherPrime(number) {
for (let i = 2, j = Math.sqrt(number); i <= j; i++) {
if (number % i === 0) { return false; }
}
return number > 1;
}
// tests
console.assert(isPrime(3) === true, `expected true got false`);
console.assert(isPrime(2) === true, `expected true got false`);
console.assert(isPrime(1) === false, `expected false got true`);
console.assert(largestPrimeFactor(13195) === 29, `expected 29 got ${largestPrimeFactor(13195)}`);
// answer
console.log(largestPrimeFactor(600851475143));