求素数

       在Project Eluer网站上刷题练习Python的基础知识的过程中,碰到很多类似问题,其中判断一个自然数n是否是素数(prime)就是很多问题的求解基础。下面对求素数的算法进行比较。

       素数定义

质数又称素数。一个大于1的自然数,如果除了1和它自身外,不能被其他自然数整除的数;(除0以外)否则称为合数 。根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积。

        根据素数定义,最简单的算法如下:

      1. 用n除以从2开始到n-1的所有数,如果n不能被整除,则n是一个素数。算法复杂度为O(n)。对此算法的改进是只判断其中的奇数,不判断偶数。

      2. 进一步减少判断的范围

定理: 如果n不是素数, 则n有满足1<d<=sqrt(n)的一个因子d.

def isprime(number):
    """Judge if number is a prime. Solution 1.
    
    如果一个数不能被小于它的平方根的所有数整除,则这个数是素数(质数)。
    return True or False
    """
    if number < 2:
        return "Error! The Smallest prime is 2!"
    
    sqrt_num = int(number**0.5)
    for i in range(2, sqrt_num+1):
        if number % i == 0:
            return False
    return True


    3.更进一步的优化

        篩法求素数

你可能感兴趣的:(python,求素数)