我刚刚开始学习python,并编写了一个程序,它根据阶乘计算阶乘数。
例如,如果我给程序一个数字120,它会告诉我它的阶乘是5
无论如何,我的问题是如何让这段代码更高效、更快。
Num = int(input())
i=0
for i in range(0,Num):
i = i + 1
x = Num/i
Num = x
if (x==1):
print(i)
我正在尝试理解以下Python函数:
def factorial(i):
if not hasattr(factorial, 'lstFactorial'):
factorial.lstFactorial = [None] * 1000
if factorial.lstFactorial[i] is None:
iProduct = 1
for iFactor in xrange(1, i+1):
iProduct *= iFactor
factorial.lstFactor
我试图使用一个代码来寻找Wilson Primes的一些乐趣,并使我回到编码的摇摆,然而,我发现当我试图除以172!+1乘以173,它会给我一个溢出错误。下面是我使用的代码:
import math
x = 2
while x < 1000:
if math.factorial(x-1) + 1 % x == 0 and (math.factorial(x-1) + 1 / 5) % x == 0 :
print(x)
x += 1
我跑步的时候给了我:
5
13
OverflowError:整数除法结果对于浮点数来说太大了
我更改了代码,发现一旦
我尝试在python中计算泊松分布,如下所示:
p = math.pow(3,idx)
depart = math.exp(-3) * p
depart = depart / math.factorial(idx)
idx范围为0
但是我有OverflowError: long int too large to convert to float
我尝试将depart转换为float,但没有结果。
这是一个问题:编写一段python代码来查找所有小于50,000的整数,这些整数等于它们的数字的阶乘和。例如:数字7666 6= 7!+ 6!+ 6!+ 6!但是145=1!+4!+5!
注意:我不允许使用任何特定的阶乘函数。
我的解决方案是:
import math
from numpy import *
for i in range(5):
for j in range(10):
for k in range(10):
for l in range(10):
for m in range(10):
我是Python的新手,目前正在阅读Python 3,面向绝对初学者,并面临以下问题。
我想用程序计算阶乘。
请求用户输入非负数n
然后使用for循环计算阶乘。
守则是这样的:
N = input("Please input factorial you would like to calculate: ")
ans = 1
for i in range(1,N+1,1):
ans = ans*i
print(ans)
虽然我想增加一个功能,以检查输入数字N是否为非负数。像这样:
if N != int(N) and N < 0:
如果不是非负数,我
老实说,我在练习却被堵住了。问题链接。
这个问题很简单,给定一个字符串,计算最大长度回文的数量(任何子字符串都是有效的,这意味着您可以取任何想要的字符,并根据需要重新排序它们)。返回结果模块1000000007。
例如,给定amim,答案是2 (mim和mam)。
全码
#!/bin/python3
import math
import os
import random
import re
import sys
from itertools import permutations
from functools import lru_cache
# Complete the initiali
在不实际计算阶乘的情况下,能找到阶乘的素因子吗?
我在这里的观点是找出阶乘的主要因素,而不是一个大的数字。您的算法应该跳过必须计算阶乘并从n中导出素因子的步骤!其中n <= 4000。
计算阶乘并找到它的素数除数相当容易,但是当输入大于n=22时,我的程序就会崩溃。因此,我认为在不需要计算阶乘的情况下完成整个过程是非常方便的。
function decomp(n){
var primeFactors = [];
var fact = 1;
for (var i = 2; i <= n; i++) {
fact = fact * i;
}
while
我一直在寻找一种简单的二项式系数算法,但无济于事。问题是我用来上课的语言有点...很奇怪。其中很多都在使用Yacc和Lex。
无论如何,我们在课堂上做了一个例子:
n=12; p=1; i=1;
while (i <= n) {
p = p * i;
print p;
i = i + 1;
};
这是一个计算阶乘的例子,但是现在我需要修改它来计算C(n,k)或N选择K(也就是二项式系数),但是我不知道我应该做得有多复杂。我们可以选择任何N和K(用户不需要输入它们),所以任何随机的2个数字都可以工作(比如上面的例子)。我非常确定这段代码只支持
#This function should return n!
def factorial(n)
return nil if n < 0
n == 0 ? 1 : n*factorial(n-1)
end
刚开始的时候,这个函数让我大吃一惊,我会这样写这个函数:
def factorial(n)
result = 1
if n == 0
return 1
end
while n > 0
result *= n
n -= 1
end
return result
end
我理解if/else语句的简写。我不明白的是在函数内部
我正试图解决这个编码问题。
对于正整数n,它的阶乘被定义为从1到n的所有整数的乘积,表示为n!N个双阶乘是1个阶乘,2个阶乘,.,最多n个阶乘的乘积: 1!·2!·3!···n!给定n(1≤n≤10^18),求n个双阶乘的十进制表示的尾随零点数。
我试着把它除以5从1到n,但是n太大了,不能及时解决。(时限为1s )
cnt = 0
for i in (1,n+1):
while i >= 5:
cnt += i//5
i //= 5
所以,我尝试了其他方法,比如stirling近似法和任何其他方法。但我解决不了这个问题。
我怎么才能解决这个问题?
我是python的初学者,正在尝试学习一些基本的代码。上面的问题是一个练习的问题,这是我的代码,它没有打印正确的阶乘数字。
for i in range(1,6):
for j in range(1,i+1):
fact=i*j
print("Factorial of number ",i," is:",fact)
它会返回这样的结果,
Factorial of number 1 is: 1
Factorial of number 2 is: 4
Factorial of number 3 is: 9
Factoria
我曾经问过一个类似的问题,但这个问题有点不同。以下是我的锻炼。我得到的答案与我通过使用python的内置函数得到的答案不一致。请告诉我做错了什么,我相信内置函数的答案必须是正确的。
我的锻炼:
def fact_cum(n):
f = 1
for x in range(1, n +1):
f *= x
print f
fact_cum(1000)
Python的内置函数:
import math
def cumFact():
x = sum(math.factorial(f) for f in range(1000))
print
今天类中关于递归和堆栈溢出的话题很有趣,我想知道是否有任何方法可以增加Python中的最大递归深度?写了一个使用递归找到n的阶乘的快速函数:
def factorial(n):
if n == 1:
return n
else:
return n * factorial(n-1)
它可以处理阶乘(994),但不能处理阶乘(995)。给出的错误是:
RuntimeError: maximum recursion depth exceeded in comparison
显然,可以迭代地找到更高的阶乘,但是,为了论证和阴谋,最大递归深度是否可以增加?
是否总是可以将递归转换为尾递归?
我很难将下面的Python函数转换为尾递归函数。
def BreakWords(glob):
"""Break a string of characters, glob, into a list of words.
Args:
glob: A string of characters to be broken into words if possible.
Returns:
List of words if glob can be broken down. List can be empty if glo
在尝试理解Y-Combinator一个小时后...我最终得到了它,但后来我意识到,没有它也可以实现同样的事情……虽然我不确定我是否完全理解它的目的。
例如:带有Y-组合器的阶乘
print (lambda h: (lambda f:f(f))(lambda f: h(lambda n: f(f)(n))))(lambda g: lambda n: n and n * g(n-1) or 1)(input())
阶乘通过引用另一个lambda中的函数来实现
print (lambda f,m:f(f,m))((lambda g,n: n and n * g(g,n-1) or 1),input(
我正在从一本书中学习Java,并通过一个阶乘示例浏览了一个关于递归的章节。
//A simple example of recursion
package tutorials;
class Factorial {
// this is a recursive method
int fact (int n) {
int result;
if(n==1) return 1;
result = fact(n - 1) * n;
return result;
}
}
class Recursion {
public static void main(
我想在python中用符号代数计算阶乘和。我可以生成的问题的最简单版本是:
from sympy.abc import j
from math import factorial
from sympy import summation
summation(factorial(j), (j, 1, 4))
我得到了以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "sympy/core/expr.py", line 194
我正在自学Ada编程语言,在我使用的课本中,有一个练习可以打印出用户输入的数字的阶乘值。我的程序编译并运行得很好,我确实得到了预期的输出,但如果我键入值13,程序就会崩溃并引发错误。 我不知道为什么数字13会这样。IDE (我使用GNAT Studio)和我当前使用的Ada 2012标准有问题吗?下面是我的代码: with Ada.Text_IO;
use Ada.Text_IO;
with Ada.Integer_Text_IO;
use Ada.Integer_Text_IO;
-- procedure main - begins the program
procedure main
我想为factorial moment编写一个函数 E(x_{r}) = x! / (x - r)! 但是如果数组ar中的一个元素很大,下面的程序需要很长时间。有没有人能帮我提高程序的效率? def fact_mom(ar, order):
sum = 0.0
for ix in ar:
if ix != 0:
a = math.factorial(ix) / math.factorial(ix - order)
sum += a
return sum / len(tt)
我编写了两个函数来计算组合。第一个使用for循环,另一个使用递归阶乘函数。为什么第一个比第二个更快?
def combinations(n: int, k: int) -> int:
# Collection >= Selection
if n < k:
raise ValueError(
"The size of the collection we are selecting items from must be "
"larger than the size of th
我对java很陌生,而且我的程序可能远远不够高效,但如下所示:
public class Compute {
public static void main(String[] args) {
for(double i = 10000; i <= 100000; i += 10000)
{
System.out.println("The value for the series when i = " + i + " is " + e(i));
}
}
public static double e(double inpu