Digit factorials: Find the Sum of All the Curious Numbers
- 时间:2020-09-10 12:45:51
- 分类:网络文摘
- 阅读:139 次
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) —
推荐阅读:令人难忘的中秋节作文 古埃及分数 长方体和正方体思维导图 一个整数除以小数是什么含义? 平行四边形、梯形、三角形的高一定要画成虚线吗? 格子乘法介绍 两个因数的末尾一共有几个零,积的末尾就有几个零。 四边形整理和复习思维导图 一些常见数的倍数的特征 什么是集合?
- 评论列表
-
- 添加评论