[파이썬] 소수의 개수를 받아 개수만큼의 소수 출력하기

조회수 1946회

안녕하세요. 파이썬 공부하다가 도저히 모르겠어서 질문 드립니다.

제목에 써 놓은 것과 같이 소수의 개수를 받아 개수만큼 출력하려고 합니다. while문을 사용하여 음수나 0, 엔터키는 입력 예외 처리를 하여 답을 구하고 싶은데, 아직 너무 초보자라 어떤 식으로 접근해야하고 어떤 식을 만들어야 하는지 모르겠어서 답답합니다.

  • 예시 코딩 식을 보여주시면 더 감사하겠습니다.
  • 코딩식이 아니라 말로 설명해 주셔도 너무 감사하겠습니다.

2 답변

  • >>> import sympy
    >>> sympy.isprime(3)
    True
    >>> sympy.isprime(10)
    False
    >>> def get_n_primes(n):
    ...     primes = []
    ...     i = 1
    ...     while len(primes) != n:
    ...         if sympy.isprime(i):
    ...             primes.append(i)
    ...         i+=1
    ...     return primes
    
    >>> get_n_primes(3)
    [2, 3, 5]
    >>> get_n_primes(10)
    [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
    >>> N = int(input("how many primes you want? :"))
    how many primes you want? :33
    
    >>> l = get_n_primes(N)
    >>> l
    [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137]
    
    • 답글 주셔서 감사합니다ㅠㅠ 참고해서 해결해보도록 할게요!! 감사합니다 :) 알 수 없는 사용자 2020.5.20 19:22
  • def inc_from(n):
        while True:
            yield n
            n += 1
    
    def take(n, iter):
        i = 0
        while i < n:
            yield next(iter)
            i += 1
    
    def filter(f, iter):
        for x in iter:
            if f(x):
                yield x
    
    def prime(iter):
        p = next(iter)
        yield p
    
        # in python2
        #for v in prime(filter(lambda n: n % p != 0, iter)):
        #    yield v
    
        # in python3
        yield from prime(filter(lambda n: n % p != 0, iter))
    
    N = 100
    print([x for x in take(N, prime(inc_from(2)))])
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)