📅  最后修改于: 2023-12-03 15:34:31.423000             🧑  作者: Mango
本程序可以打印指定区间内的素数,每隔指定时间间隔打印一个素数。
本程序采用朴素的素数判断算法:从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秒)。