设M(n,k)是具有最大可能因子n的k个不同因子的所有可能乘法的总和,其中顺序是无关的.
例如,M(5,3)= 225,因为:
6 + 8 + 10 + 12 + 15 + 20 + 24 + 30 + 40 + 60 = 225.
人们可以很容易地注意到存在C(n,k)这样的乘法,对应于可以从n个可能对象中挑选k个对象的方式的数量.在上面的例子中,C(5,3)= 10, …
假设我给出了整数a,并且b形成了一个感兴趣的范围,其中的整数为[a,b]。该范围可以跨越10^9整数。f : N -> N我想对给定函数的所有整数的值求和a <= n <= b。范围非常大,所以我想使用多线程来完成此操作。
不太正式,我想并行化以下代码:
long sum = 0;
for (long n = a ; n <= b ; n++)
sum += f(n);
System.out.println(sum);
Run Code Online (Sandbox Code Playgroud)
理想情况下(至少在我看来),该范围将平均分配处理器可用的可用线程数(假设范围内f(n)每个线程的复杂性和运行时间几乎相同)。n这些值是完全独立的,并且f实际上可以是任何函数。例如,它可以输出数字的数字之和,但它实际上可以是任何东西,这只是一个例子。
在 Java 中使用多线程有没有一种通用的方法可以做到这一点?