mathball
Version:
A JavaScript library for Competitive Programming
72 lines (62 loc) • 1.4 kB
JavaScript
;
var validate = require('../validation/positive-integer');
var check = require('../check');
/**
* hoax Number
*/
/**
* find distinct prime factors
*/
var findPrimeFactors = function findPrimeFactors(num) {
var primeFactorArr = [];
if (num % 2 === 0) {
while (num % 2 === 0) {
num /= 2;
}
primeFactorArr.push(2);
}
for (var i = 3; i <= Math.sqrt(num); i += 2) {
// Check if i is prime factor
if (num % i === 0) {
while (num % i === 0) {
num /= i;
}
primeFactorArr.push(i);
}
}
if (num > 2) {
primeFactorArr.push(num);
}
return primeFactorArr;
};
/**
* check if the number is a hoax
*/
var isHoaxNumber = function isHoaxNumber(num) {
if (check('prime')(num) === true) {
return false;
} else {
num = num.toString();
var primeFactor = findPrimeFactors(num);
var sumofNum = num.split('').map(function (val) {
return Number(val);
}).reduce(function (a, b) {
return a + b;
});
var sumOfPrimeFactor = 0;
for (var i = 0; i < primeFactor.length; i++) {
var sum = 0;
var pf = primeFactor[i];
while (pf > 0) {
sum += pf % 10;
pf = parseInt(pf / 10, 10);
}
sumOfPrimeFactor += sum;
}
return sumofNum === sumOfPrimeFactor;
}
};
exports.check = function (num) {
validate(num);
return isHoaxNumber(num);
};