以下是问题:
编写一个接受绑定N的函数,并找到第一个N. 由集合无穷大的经典证明确定的素数 素数。那就是:从P = {2}开始;然后形成,m,总和 1,产品超过P的所有元素。放置最小的素数 因子m进入P并重复。
这就是我所做的:
def get_primes(n):
i = 2
prime_list = []
while i < n:
p = prod(prime_list)+1
r = min_symbolic(prime_divisors(p))
prime_list.append(r)
i = i+1
return prime_list
当我尝试get_primes(10)时,它给了我一堆错误,我在这里做错了什么?我刚开始学习python,谢谢。
编辑:抱歉不清楚,这是我得到的错误
Error in lines 1-1
Traceback (most recent call last):
File "/projects/3fe731e3-2b4d-43b9-86a0-5efb4456f029/.sagemathcloud/sage_server.py", line 881, in execute
exec compile(block+'\n', '', 'single') in namespace, locals
File "", line 1, in <module>
File "", line 6, in get_primes
File "/projects/sage/sage-6.9/local/lib/python2.7/site-packages/sage/rings/arith.py", line 2538, in prime_divisors
return [p for p,_ in factor(n)]
TypeError: 'sage.symbolic.expression.Expression' object is not iterable
答案 0 :(得分:0)
看起来你的prod
在第一次事件中可能实际上是不可分解的。检查prod([])+1
会发生什么。我在火车上或者我自己检查一下这个。此外,我不确定为什么你不能只使用min
,min_symbolic
实际上只适用于min_symbolic(x,x^2)
之类的内容。你只是在寻找一些整数的min,所以内置的Python min
应该(?)工作正常。
答案 1 :(得分:0)
kcrisman是正确的,错误来自使用min_symbolic。用min替换它可以消除错误,但代码仍然需要调整一下,以便按照描述给出前n个素数:
def get_primes(n):
prime_list = [2]
i = 1
while i < n:
p = prod(prime_list) + 1
r = min(prime_divisors(p))
prime_list.append(r)
i = i + 1
return prime_list