【发布时间】:2019-07-15 16:28:36
【问题描述】:
我有以下简单的代码来确定素数。它是一个简单的生成和测试,没有经过优化:
prime(N) :-
M is floor(sqrt(N)),
between(2,M,K),
N mod K =:= 0, !, fail.
prime(_).
这是一个运行示例:
?- between(1,20,N), prime(N), write(N), nl, fail; true.
1
2
3
5
7
11
13
17
19
true.
如何在 Prolog 中的多个线程上并行化素数列表?输出列表不需要排序。
【问题讨论】:
-
您想并行计算它们吗?不知道并行列出它们是什么意思。
-
@j4nbur53:将输入数字集划分为 M 个不相交的集合,其中 M 是并行线程数,然后使用其中一个集合运行每个线程
-
在SWI Prolog Discourse 交叉posted。给出了答案。
-
@gusbro 不相交集很困难,下限可以包含比上限更多的素数。您需要不均衡地拆分它以获得最佳结果。所以我决定改用 1000 个数字的花束。
标签: multithreading parallel-processing prolog