Simple prime number generator in Python

前端 未结 26 2272
感情败类
感情败类 2020-11-22 07:16

Could someone please tell me what I\'m doing wrong with this code? It is just printing \'count\' anyway. I just want a very simple prime generator (nothing fancy).

26条回答
  •  梦谈多话
    2020-11-22 07:55

    Here is what I have:

    def is_prime(num):
        if num < 2:         return False
        elif num < 4:       return True
        elif not num % 2:   return False
        elif num < 9:       return True
        elif not num % 3:   return False
        else:
            for n in range(5, int(math.sqrt(num) + 1), 6):
                if not num % n:
                    return False
                elif not num % (n + 2):
                    return False
    
        return True
    

    It's pretty fast for large numbers, as it only checks against already prime numbers for divisors of a number.

    Now if you want to generate a list of primes, you can do:

    # primes up to 'max'
    def primes_max(max):
        yield 2
        for n in range(3, max, 2):
            if is_prime(n):
                yield n
    
    # the first 'count' primes
    def primes_count(count):
        counter = 0
        num = 3
    
        yield 2
    
        while counter < count:
            if is_prime(num):
                yield num
                counter += 1
            num += 2
    

    using generators here might be desired for efficiency.

    And just for reference, instead of saying:

    one = 1
    while one == 1:
        # do stuff
    

    you can simply say:

    while 1:
        #do stuff
    

提交回复
热议问题