质数

1.判断一个数是否为质数(除了1和它本身之外,不能被其他数整除)

第一版:

#判断一个数是否为质数
def is_prime1(n):
    if n == 0 or n == 1:
        return 0
    i = 2
    while i < n:
        if n % i == 0:
            return 0
        i += 1
    return 1

第二版:

import math
def is_prime2(n):
    if n == 0 or n == 1:
        return 0
    i = 2
    while i <= int(math.sqrt(n)):
        if n % i == 0:
            return 0
        i += 1
    return 1

第三版:

相比于第二版,省去了对去偶数因子的判断

import math
def is_prime3(n):
    if n == 0 or n == 1:
        return 0
    if n % 2 == 0:
        return n == 2
    if n % 3 == 0:
        return n == 3
    if n % 5 == 0:
        return n == 5

    for i in range(7,int(math.sqrt(n))+1,2):  #省去了对偶数的判断,如果概述能够被偶数整除,则一定能被2整除,程序早就返回了
        if n % i == 0:
            return 0
    return 1

 

2.显示整数n以内的所有质数:

#查找n以内的所有质数
def prime(n):
    flags = [1]*(n+2)  #设置标志位,默认都是1,表示是质数
    flags[1] = 0   #1不是质数
    p = 2    #质数从2开始查找
    while p <= n:
        print(p)     #打印质数
        #在python3中的range就是python2中的xrange
        for i in range(2*p,n+1,p):
            flags[i] = 0    #将该质数的倍数(非该质数本身)都置位0,表示非质数

        #while p <= n:
        while True:
            p += 1
            if flags[p] == 1:   #flags[n+1]=1 保证了程序最后的顺利退出
                break

 

转载于:https://www.cnblogs.com/hupeng1234/p/6681244.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值