EularProject 34: 一个数字与他每位数的阶乘和

Digit factorials

Problem 34

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.

Answer:

40730

Completed on Wed, 8 Jul 2015, 17:34

Go to the thread for problem 34 in the forum.

from math import factorial

m=factorial(9)

def func(x):
    result=0
    while x>0:
        result+=factorial(x%10)
        x//=10
    return result
k=1
while True:
    if k*m<pow(10,k):
        break
    k+=1

result=0
for i in range(3,pow(10,k)):
    if i==func(i):
        result+=i
print(result)

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-16 23:09:38

EularProject 34: 一个数字与他每位数的阶乘和的相关文章

有1、2、3、4四个数字,能组成多少个互不相同且一个数字中无重复数字的三位数?并把他们都输出。

/** * 有1.2.3.4四个数字,能组成多少个互不相同且一个数字中无重复数字的三位数?并把他们都输出. * */ public class Test1 { public static void main(String[] args) { int num = 0, c = 0; for (int i = 1; i <= 4; i++) { for (int j = 1; j <= 4; j++) { for (int k = 1; k <= 4; k++) { if (i != j &

C语言求S(n) = a+aa+aaa+aaaa+...+aa..a之值,其中a是一个数字,n表示a的位数例如:2+22+222+2222+22222(此时n=5),n和a都从键盘输入。

求S(n) = a+aa+aaa+aaaa+...+aa..a之值,其中a是一个数字,n表示a的位数例如:2+22+222+2222+22222(此时n=5),n和a都从键盘输入. #include <stdio.h> int main() { int n; int a; int sum = 0; int k = 0; int temp = 1; scanf("%d,%d", &n, &a); for (int i = 0; i<n; i++) { k

得到一个数字中每一位的数字

学习编程也有一段时间了,随着学习的不断深入,我越来越体会到了算法的重要性,最近遇到了一些非常有意思的算法,比如打印水仙花数.将数字逆置,在这两个算法中会用到一个数字钟每一位的值 如:判断数字123是否是水仙花数需要得到每一位的数字 通常计算每一位的数字的算法是: 个位:a = 123 % 10 = 3 十位:b  = 123 %100 / 10 = 2 百位::c = 123 % 100 = 2 随着位数的越来越大,这种方法满足不了程序的需求 比如计算:123445677777777777777

61. 从1到n,共有n个数字,每个数字只出现一次。从中随机拿走一个数字x,请给出最快的方法,找到这个数字。如果随机拿走k(k&gt;=2)个数字呢?[find k missing numbers from 1 to n]

[本文链接] http://www.cnblogs.com/hellogiser/p/find-k-missing-numbers-from-1-to-n.html  [题目] 从1到n,共有n个数字(无序排列),每个数字只出现一次.现在随机拿走一个数字x,请给出最快的方法,找到这个数字.要求时间复杂度为O(n),空间复杂度为O(1).如果随机拿走k(k>=2)个数字呢? [分析] 题目给出的条件很强,数字是从1~n的数字,限制了数字的范围:每个数字只出现一次,限制了数字出现的次数:随即拿走了一

题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。

一.第一种写法 package com.pb.demo1; import java.util.Scanner; /** * 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字.例如2+22+222+2222+22222(此时共有5个数相加), * a以及累加数的位数是从键盘接收. 程序分析: * 1. 接收从键盘输入的一个数(数字只能是1-9之间的数) * 2. 接收一个数表示累加数的位数 * 3.例如,输入一个4(累加数的位数),键盘输入a的值是5:s=5+55+555

14.输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。 要求时间复杂度是O(n)

待完善! 转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4259199.html 声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己也方便有类似问题的朋友,本文的思想也许有所借鉴,但源码均为本人实现,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明.谢谢. 题目: 输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字.要求时间复杂度是O(n).如果有多对数字的和等于输

数A去掉一个数字后得到B,给出A与B的和N求所有可能的数A

废话不多说  源代码中有注释 /* File : ABN.c Date : 2015/4/4 version : 1.0 platform : windows 7 x86_64 Function : A + B = N 1 <= N <= 10^9 B 是A去掉一个数字后得到 例如 A + B = 34 A可以是27或31 特例: 12 = 11 + 1 会执行两次 11 十位个位一样,去掉十位和个位一样. 故可以用一个数组保存结果最后输出. */ #include <stdio.h&g

18.n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。 当一个数字删除后,从被删除数字的下一个继续删除第m个数字。 求出在这个圆圈中剩下的最后一个数字。

转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4263868.html 声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己也方便有类似问题的朋友,本文的思想也许有所借鉴,但源码均为本人实现,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明.谢谢. 题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字). 当一个数字

判断一个数字中是否包含两个相同的子串并输出

功能:判断一个数字中是否包含两个相同的子串(字串长度至少大于等于2),并输出(仅输出第一次相同的子串) 1 package ren.laughing.test.problem; 2 3 import java.util.Scanner; 4 5 /** 6 * 功能:判断一个数字中是否包含两个相同的子串(字串长度至少大于等于2),并输出(仅输出第一次相同的子串) 7 * 8 * @author Laughing_Lz 9 * @time 2016年7月4日 10 */ 11 public cla