如何在Python 3中检查给定数字是不是是阶乘[关闭]

Posted

技术标签:

【中文标题】如何在Python 3中检查给定数字是不是是阶乘[关闭]【英文标题】:How to check if a given number is a factorial or not in Python 3 [closed]如何在Python 3中检查给定数字是否是阶乘[关闭] 【发布时间】:2020-01-28 21:33:37 【问题描述】:

例如 24,是一个阶乘,因为:

 4 * 3 * 2 * 1 = 24

代码应将 24 作为输入,输出(见下文)是否为阶乘。

    return "is a factorial."
else:
    return "is not a factorial."
print("The number " + str(24) + " " + str(isFactorial(24)))

【问题讨论】:

到目前为止你有什么尝试? 【参考方案1】:

我向你推荐 2 个解决方案:

def check_fact(n):
    i = fact = 1
    while fact<n:
        i += 1
        fact *= i
    return fact==n

def check_fact_opt(n):
    i = 1
    while n>1:
        if n % i == 0:
            n /= i
        else:
            break
        i+=1
    return n<=1

两种解决方法都产生相同的结果并且都解决了您的问题,但后者的迭代次数要少得多:

        N          is_fact     n_it  is_fact_opt  n_it_opt
2               |   True    |   1   |   True    |   1   
6               |   True    |   2   |   True    |   2   
24              |   True    |   3   |   True    |   3   
50              |   False   |   4   |   False   |   2   
100             |   False   |   4   |   False   |   2   
120             |   True    |   4   |   True    |   4   
200             |   False   |   5   |   False   |   2   
500             |   False   |   5   |   False   |   2   
1000            |   False   |   6   |   False   |   2   
5040            |   True    |   6   |   True    |   6   
100000          |   False   |   8   |   False   |   2   
3628800         |   True    |   9   |   True    |   9   
3628801         |   False   |   10  |   False   |   1   
100000000000    |   False   |   14  |   False   |   2   

【讨论】:

【参考方案2】:

最简单的方法就是让它倒过来。生成阶乘,直到你找到它。这样一来,您肯定会始终比较整数:

def is_factorial(n):
    i = f = 1
    while f < n:
        i += 1
        f *= i
    return f == n

【讨论】:

【参考方案3】:

最简单的方法是在这样的数组中排序大量阶乘数的现成列表

 List: 1, 2, 6, 24, 120, ...

然后搜索此列表以查看您的号码是否有效 我建议使用二进制搜索,因为列表是排序的。

阶乘列表Link

【讨论】:

【参考方案4】:

(未经测试,匆匆写下)

def isfac(n):
    i = 2
    while n > 1:
        n = n / i
        i = i + 1
    return n == 1

【讨论】:

@CalebGoodman 这个帖子没有回答。但是,它确实会比较 float 对象是否完全相等。

以上是关于如何在Python 3中检查给定数字是不是是阶乘[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

10个JavaScript代码片段,使你更加容易前端开发。

10个JavaScript代码片段,使你更加容易前端开发。

计算阶乘之和

在Python中使用Reduce函数来查找因子

如何检查数字是不是可以被另一个Python整除

如何检查我的 python 对象是不是为数字? [复制]