Python 计算从1-10000内的素数(多线程demo)

Python 计算从1-10000内的素数

素数:质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。

利用for循环从1-10000将值赋值给i

在函数中判断i是否为素数,用这个数求余这个数以内的数判断余数是否为0

素数返回True,不是素数返回False

代码:

def sushu(i):
    if i == 1:
        return False

    for num in range(2, i):
        if i % num == 0:
            return False
    else:
        return True


if __name__ == '__main__':
    su = []
    for i in range(1, 10000):
        if sushu(i):
            su.append(i)
    print(su)

在这里就实现了输出1-10000的素数。

接下来对上面代码进行一点点优化:

提示:素数不要从1除到n-1,只要到n//2+1

def sushu(i):
    if i == 1:
        return False

    for num in range(2, i//2+1):
        if i % num == 0:
            return False
    else:
        return True


if __name__ == '__main__':
    su = []
    for i in range(1, 10000):
        if sushu(i):
            su.append(i)
    print(su)

以上就完成了对1-10000素数的判断,结果和上面的代码是一样的

我在代码中另外添加了对列表su进行一个长度的输出,10000以内的素数有1229个

 

接下来,运用学习到的多线程基础对这两个代码进行测试

这里将循环提高到50000次

import threading
from time import ctime


def dosushu1():
    print('sushu1 staring at:', ctime())
    su = []
    for i in range(1, 50000):
        if sushu1(i):
            su.append(i)
    print('sushu1 done:', ctime())


def sushu1(i):

    if i == 1:
        return False

    for num in range(2, i//2+1):
        if i % num == 0:
            return False
    else:
        return True


def dosushu2():
    print('sushu2 staring at:', ctime())
    su = []
    for i in range(1, 50000):
        if sushu2(i):
            su.append(i)
    print('sushu2 done:', ctime())


def sushu2(i):

    if i == 1:
        return False

    for num in range(2, i):
        if i % num == 0:
            return False
    else:
        return True


if __name__ == '__main__':
    print('Starting at:', ctime())
    t1 = threading.Thread(target=dosushu1, args=())
    t2 = threading.Thread(target=dosushu2, args=())
    t1.start()
    t2.start()
    t1.join()
    t2.join()
    print('ALL done at: ', ctime())

结果:

Python 计算从1-10000内的素数(多线程demo)_第1张图片

稍微优化后的代码比原本的快了不少

 

本次主要还是解决计算1-10000素数的问题

下面我给代码加上注释

Python 计算从1-10000内的素数(多线程demo)_第2张图片

顺便学习了多线程的基本使用

 

 

 

 

你可能感兴趣的:(python)