📜  python程序以间隔打印素数 - Python(1)

📅  最后修改于: 2023-12-03 15:34:31.423000             🧑  作者: Mango

Python程序以间隔打印素数

程序介绍

本程序可以打印指定区间内的素数,每隔指定时间间隔打印一个素数。

程序思路

本程序采用朴素的素数判断算法:从2到n-1枚举n的因数,若找到,则n非素数。但考虑到时间复杂度,实际上只需枚举到n的平方根即可。同时,为了增加代码运行效率,我们在筛选素数的同时,先将小于等于n的整数按升序排列,这样在后续寻找素数时就可以只用遍历前面已筛选出来的素数。

程序采用线程机制,通过定时器达到指定时间间隔打印一个素数的效果。

程序用途

该程序可以应用于数学领域的一些问题,也可以作为Python多线程编程的一个小练习。

程序代码
import threading

class PrimeThread(threading.Thread):
    def __init__(self, interval, start, end):
        threading.Thread.__init__(self)
        self.interval = interval
        self.start = start
        self.end = end

    def run(self):
        primes = self.get_primes(self.start, self.end)
        for prime in primes:
            print(prime)
            threading.Event().wait(self.interval)

    # 判断一个数是否为素数
    def is_prime(self, n):
        if n <= 1:
            return False
        if n == 2 or n == 3:
            return True
        if n % 6 != 1 and n % 6 != 5:
            return False
        for i in range(5, int(n ** 0.5) + 1, 6):
            if n % i == 0 or n % (i + 2) == 0:
                return False
        return True

    # 获取指定区间内的所有素数
    def get_primes(self, start, end):
        primes = []
        for i in range(start, end + 1):
            if self.is_prime(i):
                primes.append(i)
        return primes

if __name__ == '__main__':
    pt = PrimeThread(1, 1, 1000)
    pt.start()

代码片段:PrimeThread是主体函数,用于获取素数并控制打印时间间隔;is_prime函数是素数判断函数;get_primes函数是获取指定区间内的所有素数。在 if __name__ == '__main__':部分,我们创建一个参数化的PrimeThread对象pt,并启动该线程。通过调整参数,我们可以控制素数生成的区间(1到1000),以及打印素数的时间间隔(1秒)。