wanlifeipeng

  博客园 :: 首页 :: 博问 :: 闪存 :: :: 联系 :: 订阅 订阅 :: 管理 ::

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

 

posted on 2017-04-08 11:22  wanlifeipeng  阅读(215)  评论(0编辑  收藏  举报