Digit factorials: Find the Sum of All the Curious Numbers
- 时间:2020-09-10 12:45:51
- 分类:网络文摘
- 阅读:142 次
145 is a curious number, as 1! + 4! + 5! = 1 + 24 + 120 = 145.
Find the sum of all numbers which are equal to the sum of the factorial of their digits.
Note: as 1! = 1 and 2! = 2 are not sums they are not included.
Pre-computing the Digit factorials
The factorials we all need to know are from 0! to 9!. Therefore, we can pre-compute the digital factorials and store them in a dictionary (or hash map).
1 2 3 4 5 6 7 | let factorials = {}; let s = 1; for (let i = 1; i <= 9; ++ i) { s *= i; factorials[i] = s; } factorials[0] = 1; |
let factorials = {};
let s = 1;
for (let i = 1; i <= 9; ++ i) {
s *= i;
factorials[i] = s;
}
factorials[0] = 1;A single loop from 1 to 9 is sufficient as we are iteratively multiple the next number.
Uppper bound of the Curious Numbers
We don’t need to and we can’t search infinite numbers. One upperbound we can use is 9999999 as 7*9! is less than 9999999.
We then bruteforce all the numbers and sum those curious numbers. The curious number can be determined by the following procedure: converted to string, and split into char array, then sum up the digital factorials, finally comparing the sum with the number.
1 2 3 4 5 6 7 8 9 10 | let sum = 0; for (let i = 3; i <= 9999999; ++ i) { let x = String(i).split('').reduce((a, b) => { return a + factorials[b]; }, 0); if (x === i) { sum += i; } } console.log(sum); |
let sum = 0;
for (let i = 3; i <= 9999999; ++ i) {
let x = String(i).split('').reduce((a, b) => {
return a + factorials[b];
}, 0);
if (x === i) {
sum += i;
}
}
console.log(sum);The answer is 40730.
–EOF (The Ultimate Computing & Technology Blog) —
推荐阅读:“最大份扬州炒饭”喂猪背后的浮躁心态 吉尼斯宣布“最大份扬州炒饭”纪录无效 包菜有意想不到的防癌养胃保健功效 食药总局公布不合格食品名单蜂蜜上黑榜 板栗养胃健脾是医药学家推崇的补肾果 冬季手脚冰凉者可以多喝“三红”暖身汤 老百姓对于食物中致癌物的认识误区 三类食品是引发癌症(恶性肿瘤)的因素 枸杞虽好但两种人吃了反而对健康有害 4个与大豆营养价值有关的真假说法
- 评论列表
-
- 添加评论