zoukankan      html  css  js  c++  java
  • 判断任意数字是否为素数

    素数又被称质数Prime number)指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个因数的数)。大于1的自然数若不是素数,则称之为合数

    用python实现判断一个数字是否为素数。

    第一种方法整除法,通过对数字范围以内的数字进行循环整除,效率很低,数字大的时候耗时,代码实现:

    def is_prime(n):
        if n == 2:
            return True
        if n % 2 == 0 or n <= 1:
            return False
    
        sqr = int(math.sqrt(n)) + 1
    
        for divisor in range(3, sqr, 2):
            if n % divisor == 0:
                return False
        return True
    

    第二种方法是用算法优化整个逻辑与执行流程,筛选出n以内的所有素数,原理是通过定义一个数组,生成 n*True 个元素,代码实现:

    def prime_sieve(n):
        sieve_lst = [True] * n
        sieve_lst[0] = False              # 第一个和第二个不是素数,设为False
        sieve_lst[1] = False          
        for i in range(3, int(math.sqrt(n))+1):
            pointer = i *2                # 对n数字以内的倍数,全部设为False
            while pointer < n:
                sieve_lst[pointer] = False
                pointer += i   
        
        primes = []
        for x in range(n):
            if sieve_lst[x]:
                primes.append(i)
        print primes
        return primes
    
    prime_sieve(33)
    [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
    

    此算法来源于 《Hacking Secret Ciphers with Python》一书

  • 相关阅读:
    USACOZero Sum
    USACOControlling Companies
    USACOParty Lamps
    USACOMoney Systems
    UVa11292
    USACOLongest Prefix
    USACOThe Tamworth Two
    USACORunaround Numbers
    业内常见电子病历编辑器简单比较(1)编辑控件来源比较
    GB(国标)字典大全
  • 原文地址:https://www.cnblogs.com/starsea/p/5639434.html
Copyright © 2011-2022 走看看