返回1000以内的质数

分析

  任何一个合数都可以分解成多个质数相乘的形式,所以只需要判断小于i的所有质数是否为i的因子。

def FindPrimeNumbers(n):
    prime = []
    if(n<2):
        return prime
    for i in range(2, n+1):
        if len(prime)==0:
            prime.append(i)
        else:
            isPrime = True
            for j in prime:
                if i%j==0:
                    isPrime = False
                    break
                j += 1
            if isPrime:
                prime.append(i)
    return prime


改进

  合数至少包含2个不为1的因子,且若a<ba*b=i,则a<sqrt(i)<b,则在小于sqrt(i)的范围内,一定能找到i的一个因子a,因此内层循环只需要循环到小于等于sqrt(i)的地方,且仅在a=b时取等号。

def FindPrimeNumbers(n):
    prime = []
    if(n<2):
        return prime
    for i in range(2, n+1):
        if len(prime)==0:
            prime.append(i)
        else:
            isPrime = True
            j = 0
            while(j<len(prime) and prime[j]<=pow(i, 0.5)):
                if i%prime[j]==0:
                    isPrime = False
                    break
                j += 1
            if isPrime:
                prime.append(i)
    return prime
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容