使用Euclid无限次证明列出N下的所有素数

时间:2015-10-19 11:33:42

标签: python primes sage

以下是问题:

  

编写一个接受绑定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

2 个答案:

答案 0 :(得分:0)

看起来你的prod在第一次事件中可能实际上是不可分解的。检查prod([])+1会发生什么。我在火车上或者我自己检查一下这个。此外,我不确定为什么你不能只使用minmin_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