Форум сайта python.su
0
Подскажите почему не работает вывод списка простых чисел в заданном диапазоне? Выдаётся тупо список всех чисел из диапазона.
def simple (n): div=0 for i in xrange (2, n+1): for j in xrange (2, i): if i % j == 0: div += 1 if div == 0: return True else: return False n=input() l = [ i for i in xrange(n) if simple(i) ] print l
Офлайн
88
неправильная вложенность
Офлайн
0
А зачем создавать функцию, если ты потом используешь генератор?
http://habrahabr.ru/post/122538/ - вот тут первый вариант - как раз то, что тебе нужно, судя по всему.
Только еще один момент: а есть ли смысл бегать во втором цикле до самого числа, может быть, хватит и его половины. Само собой, оно может и не делиться на 2 нацело, просто с отбросом дробной части и прибавлением 1.
Офлайн
0
Я вот нашёл еще нечто похожее. Это генератор простых чисел. Но по ходу не работает. В чём здесь ошибка, не подскажите?
def endless_prime_generator(): used_primes = [] current_n = 2 while True: is_prime = True for p in used_primes: if current_n % p == 0: is_prime = False break if is_prime: used_primes.append(current_n) yield current_n current_n += 1 primes = endless_prime_generator() print "Iterating endless prime generator" for i in range(10): print primes.next(),
Офлайн
33
r2d2
Подскажите почему не работает вывод списка простых чисел в заданном диапазоне? Выдаётся тупо список всех чисел из диапазона.
неправильная вложенность
def simple (n): div=0 for j in xrange (2, n): if n % j == 0: div += 1 if div == 0: return True else: return False n=input() l = [ x for x in xrange(1, n+1) if simple(x) ] print l
http://habrahabr.ru/post/122538/
Отредактировано Budulianin (Июнь 27, 2013 15:28:50)
Офлайн
0
Вот моя последняя версия. Помогите плз довести до ума. Выводится пока только: 2,3,2,2,2,2,2
def simple(): lst=[] i = 2 while True: for p in lst: for i in xrange(2, p): if i % p == 0: break else: lst.append(i) yield i i += 1 gen=simple() for j in range(7): print gen.next(),
Офлайн
7
http://py-algorithm.blogspot.ru/2011/04/blog-post_09.html
Только там примеры для Python2. Для Python3 переделать не составит труда, например со множеством:
import math def primes(N): """Возвращает все простые от 2 до N""" sieve = set(range(2, N)) for i in range(2, int(math.sqrt(N))): if i in sieve: sieve -= set(range(2*i, N, i)) return sieve print (primes(158))
def good_prime(C): D=int(C/2) B=int(C/6) A=set(range(D)) for i in range(1,B+1): for j in range(i,int((D+i)/(1+2*i)+1)): A.discard(i+j+2*i*j) A=[ 2*x+1 for x in A ] return A print(good_prime(158))
Отредактировано elisk (Июнь 27, 2013 22:11:34)
Офлайн
0
Ну да, там тоже вот недавно смотрел, но я пытаюсь сделать именно в виде генератора как в предыдущем посте.
Офлайн