UNPKG

mathball

Version:

A JavaScript library for Competitive Programming

72 lines (62 loc) 1.4 kB
'use strict'; 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); };