python中的强数

2024-09-24 04:28:51 发布

您现在位置:Python中文网/ 问答频道 /正文

如果一个数的阶乘之和等于这个数本身,那么这个数就是强数。 例如:145=1!+4个!+5个!在

为此,我用python编写了以下代码:

import math
def strong_num():
    return [x for x in range(1,1000) if x==int(reduce(lambda p,q:math.factorial(int(p))+math.factorial(int(q)),str(x)))]

print strong_num()

但是翻译再也回不来了?? 这个代码有什么问题?在


Tags: 代码inimportreduceforreturnifdef
3条回答

您的reduce输入错误,不应计算p的阶乘。事实上,只使用sum

return [x for x in range(1, 1000) 
          if x == sum(math.factorial(int(q)) for q in str(x))]

^{}函数可以看作是:

^{pr2}$

例如,如果x==145,那么您的reduce部分将计算

   int(reduce(lambda p, q: factorial(int(p)) + factorial(int(q)), str(x)))
== int(reduce(lambda p, q: factorial(int(p)) + factorial(int(q)), "145"))
== int(factorial(factorial(1) + factorial(4)) + factorial(5))
== int(factorial(1 + 24) + 120)
== int(15511210043330985984000000 + 120)
== 15511210043330985984000120

解释器很可能无法完成,因为需要计算一个非常大的数的阶乘(考虑(2×9!)!…)在

如果仍需要保留reduce,则应将其更改为:

 reduce(lambda p,q: p + math.factorial(int(q)),  str(x),  0)
#                   ^                                     ^
#                   No need to factorial                  Add initializer too

strong数是指位数的阶乘和等于原始数的那些数。 所以,这里有一个简单的程序来查找python列表中的强数。在

def factorial(number):
    if(number == 0 or number == 1):
        fact = 1
    else:
        fact = number * factorial(number - 1)
    return fact

def strong_number(list):
    new_list=[]
    for x in list:
        temp = x
        sum = 0
        while(temp):
            rem = temp % 10
            sum += factorial(rem)
            temp = temp // 10
        if(sum == x):
           new_list.append(x)
        else:
           pass  
    return new_list

# Example 1
val_list = [1,2,5,145,654,34]
strong_num_list = strong_number(val_list)
print(strong_num_list)
# Example 2 and this will return an empty list as there is no strong number found in 
the list that is passed
val_list2 = [5,10,14,34,45]
strong_num_list = strong_number(val_list2)
print(strong_num_list)

现在,如果不想传递一个列表,只需从函数strong_number中删除for循环。 快乐学习!!!在

什么是强数?

强数是那些位数的阶乘和等于原始数的数。 例如:145是强数。自从,1!+4个!+5个!=145

num = int(input("Enter any number"))
user_given_no=num
i = 0
fact = 1
fact_list = []
diff_no = []
while num != 0:
    i = num % 10
    num = num//10
    diff_no.append(i)


for y in diff_no:

    x = y
    fact = 1
    while x != 0:
        fact *= x

        x -= 1
    fact_list.append(fact)

sum = 0
for x in fact_list:
    sum += x

if sum == user_given_no:
    print("Strong number")
else:
   print("Not a Strong number")

相关问题 更多 >