【发布时间】:2020-11-26 16:13:18
【问题描述】:
我必须测试 n = 17 是否为质数:(n-1)!模 n = n-1。首先,我必须计算 16 到 4 个线程的阶乘,这意味着间隔 1..16 必须分成 4 个子间隔:1..4、5..8、9..12、14 ..16。我已经设法通过 16 个线程测试了 17 是否是质数,每个操作一个,但我不知道如何细分它以便仅在 4 个线程中完成操作。
非常感谢您的一些想法,谢谢!
这是我的代码:
import threading
n = 17
t = n-1
ts = []
num = (n-1)/t
def calcFak():
for i in range(t):
c = i*(n-1)/t+1
thread = threading.Thread(target=threads, args = (c,))
ts.append(thread)
thread.start()
thread.join()
def threads(var):
print(f"start thread {var}")
global num
num = num * var
print(f"end thread {var}")
def managerThread(thread):
calcFak()
print(num)
if num % n == t:
print(n, ' is Prime')
else:
print(n, ' is not Prime')
t2 = threading.Thread(target = managerThread, args=(ts,))
t2.start()
【问题讨论】:
-
子间隔都在自己的线程中是否重要?我觉得有 16 个任务并让它们由 4 个线程执行会更有效率。
-
嗨 Finn,感谢您的回复。在这种情况下,每个子间隔都必须有自己的线程。这是一个在 Python 中练习同步的练习,所以我不确定它是否有望高效
-
你不应该期望能够在纯 Python 代码中进行并行计算:realpython.com/python-gil
-
出于好奇,你为什么要实现这个特定的算法?有一些方法可以在不显式计算 (N-1) 的情况下测试 N 是否为素数!
-
您好所罗门,谢谢您的回答。这是一个练习与 Python 同步的练习,我按照提供的说明进行操作,其中一个是测试 n 是否为素数的方式
标签: python python-3.x multithreading python-2.7 factorial