Мне нужна помощь в распараллеливании следующей последовательной задачи для нахождения ряда счастливых чисел https://en.wikipedia.org/wiki/Lucky_number. Может кто-нибудь помочь мне решить эту проблему с переменным числом потоков (от 1 до 8). Большое спасибо.
import java.util.Scanner;
public class Main {
public static void isLucky(int n) {
int numlf=n;
int mvdelloc=2;
int arr[]=new int[n+1];
// Insert value to the array
for(int i=1;i<=n;++i)
{
arr[i]=i;
}
//lucky series logic
int delloc=2;
while (delloc<=numlf )
{
//Delete array
int temp=delloc;
while(delloc<=n)
{
if(arr[delloc]!=0)
{
arr[delloc]=0;
numlf--;
}
delloc+=temp;
}
// Arrange Array
for(int j=1;j<=n-numlf;++j)
{
for(int k=1;k<=n;++k)
{
if(arr[k]==0 && k+1<=n)
{
arr[k]=arr[k+1];
arr[k+1]=0;
}
}
}
// Display Arrange array
System.out.println("Display arranged array");
for(int k=1;k<=numlf;++k)
{
System.out.print(arr[k]+" ");
}
delloc=arr[mvdelloc];
++mvdelloc;
System.out.println();
}
//Display final result
System.out.println();
System.out.print("your luck NUM : ");
for(int i=1;i<=numlf;++i)
{
System.out.print(arr[i]+" ");
}
}
public static void main(String[] args) {
long startTime = System.nanoTime();
// for: 25640 program takes 5 minutes to execute
isLucky(25640);
long endTime = System.nanoTime();
long timeElapsed = endTime - startTime;
System.out.println("\nExecution time in minutes : " +(float) timeElapsed / 1000000 / 1000 /60 );
}
}
Мне нужно запустить 1, 2, 3, 4, 5, 6, 7, 8 потоков, чтобы увидеть, как сокращается время выполнения.