2015-10-19 2 views
0

Вот вопрос:Список всех простых чисел ниже N с помощью Евклида беспредельности простого доказательства

Написать функцию, которая принимает связанный 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), что же я делаю не так? Я только начал изучать питон, спасибо.

EDIT: жаль что не ясно, вот ошибки я получаю

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 
+3

'гроздь errs' вы можете быть более конкретным? Какие ошибки? на какой линии? Вы пытались понять их? – oliverpool

+1

Что такое 'prod',' min_symbolic' и 'prime_divisors'? Пожалуйста, дайте [MCVe] (http://stackoverflow.com/help/mcve). – Psytho

+1

@ Alex.S: это встроенные функции Sage. Вопрос должен по-прежнему точно указывать на ошибки, но он упоминает в заголовке и тегах, что он находится в среде Sage. – DSM

ответ

0

Похоже, ваш prod, вероятно, на самом деле не факторизуема в первом случае. Проверьте, что происходит с prod([])+1. Я нахожусь в поезде, или я сам это проверю. Кроме того, я не уверен, почему вы не можете просто использовать min, min_symbolic действительно только для таких вещей, как min_symbolic(x,x^2); вы просто ищете минимум некоторых целых чисел, поэтому встроенный Python min должен (?) работать нормально.

0

kcrisman верно, что ошибка исходит из использования min_symbolic. Замена его с мин избавляется от ошибок, но код все еще должен быть изменен немного, чтобы дать первые п простых чисел, как описано:

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