Python 这个算法会运行多少次?
我在python中有一个函数来计算一个数字的素数因子:Python 这个算法会运行多少次?,python,Python,我在python中有一个函数来计算一个数字的素数因子: def prime_factors(n): i = 2 factors = [] while i * i <= n: if n % i: i += 1 else: n //= i factors.append(i) if n > 1: factors.append(n)
def prime_factors(n):
i = 2
factors = []
while i * i <= n:
if n % i:
i += 1
else:
n //= i
factors.append(i)
if n > 1:
factors.append(n)
return factors
def基本因子(n):
i=2
因子=[]
而i*i 1:
因子。追加(n)
回报率
我的问题是,程序在输入n时会运行多少次以停止?
如果你举一个例子,比如56,我可以很容易地算出它,但抽象地说,我似乎无法写出一个“公式”,在计算所有素数因子之前,程序将运行多少次。- 循环执行大约
次max(prime\u factors(n))
- 如果
为素数,则最坏情况为n
次n
- 与其说是编程问题,不如说是一个数学问题,但有点有趣
让
n
的素因子分解的形式为:
其中,P1
是最小的素因子,P2
是第二个最小的etc,Pk
是最大的素因子
有两组循环迭代需要考虑:
i
是n
i
不是n
i
是一个主要因素时代码是如何工作的(即在n
除以i
时保持循环),指数之和应该是相当直观的。减去1是因为最后一次追加发生在循环之外
第2组
第二组循环稍微复杂一些,因为公式本身实际上取决于az>1
,也取决于Pk
和p(k-1)
(n的第二最小素因子)的相对大小
如果ak>1
,则通过循环的最后一个i
具有值Pk
。因此,被评估的i
的非素因子值是2到Pk
之间的所有数字,它们不在P1
到Pk
的集合中。其公式是:
记住k
是n
的不同素数因子的数目。最后减去1是因为它在2和Pk
之间,而不是1和Pk
之间
另一方面,让我们考虑一下
ak=1
(并且ak<1
是不可能的,因为ak
是最大素数因子的指数-它必须是1或更大)。然后i
从不取Pk
的值,因为循环在该点之前结束,因为而i*i如果我理解您的问题,并且您没有使用递归调用;您询问“while循环将执行多少次,以生成给定整数n
的所有素数”
在代码中;你正在运行一个while循环,条件是i*i这是你的家庭作业吗?你怎么会认为有公式?@PeterWood我想ASm正在寻找某种运行时分析,q.v.这篇文章是针对类似问题的。FWIW,这是Python 3中@barakmanos就地楼层划分的一个实现,所有等式看起来都是相同的答案@你应该看看这个!抱歉,我刚刚发现sciweaver在不断地用mathurl.com图片显示公式方面有点古怪,而mathurl.com图片看起来更稳定。这就是我要找的。我的数学能力还不足以让我自己解决这个问题,但非常有趣!