Найти - Пользователи
Полная версия: Вывод списка простых чисел в заданном диапазоне.
Начало » Python для новичков » Вывод списка простых чисел в заданном диапазоне.
1
r2d2
Подскажите почему не работает вывод списка простых чисел в заданном диапазоне? Выдаётся тупо список всех чисел из диапазона.
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
Shaman
неправильная вложенность
empirik
А зачем создавать функцию, если ты потом используешь генератор?
http://habrahabr.ru/post/122538/ - вот тут первый вариант - как раз то, что тебе нужно, судя по всему.
Только еще один момент: а есть ли смысл бегать во втором цикле до самого числа, может быть, хватит и его половины. Само собой, оно может и не делиться на 2 нацело, просто с отбросом дробной части и прибавлением 1.
r2d2
Я вот нашёл еще нечто похожее. Это генератор простых чисел. Но по ходу не работает. В чём здесь ошибка, не подскажите?

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(),

Должен как бы выводить:
Iterating endless prime generator
2 3 5 7 11 13 17 19 23 29
Budulianin
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/
клёвая статья :)
r2d2
Вот моя последняя версия. Помогите плз довести до ума. Выводится пока только: 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(),
elisk
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))
r2d2
Ну да, там тоже вот недавно смотрел, но я пытаюсь сделать именно в виде генератора как в предыдущем посте.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB